【问题标题】:Hibernate annotation placement in Entity Class实体类中的休眠注释放置
【发布时间】:2013-02-19 11:00:59
【问题描述】:

我有以下实体类。我可以将注释放在成员变量声明的顶部或 getter 和 setter 的顶部。

当我将注释放在成员变量声明附近时,它将保存该变量的值(不是 getter 返回的值),如果我将注释放在 getter 附近,它将保存 getter 返回的值(不是变量的值)。这一切都很好。

我的问题是,当我们将注释放在成员变量附近时,虽然它被声明为私有,但在持久化的同时,休眠如何访问成员变量值。?

 @Entity
 @Table(name="USERS")
 public class Users {
   @Id @GeneratedValue(strategy=GenerationType.AUTO) 
   private int userId;

   //This will save only value of userName no mater what getter returns
   @Column(name="user_name")
   private String userName;

    public int getUserId() {
      return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    //Putting @Column(name="user_name") here will save value  
    // "userName from getter" to the DB

    public String getUserName() {
          return userName + " from getter";
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
 }

【问题讨论】:

    标签: hibernate annotations


    【解决方案1】:

    它使用反射。有关更多信息,请参阅本文:http://www.javalobby.org/java/forums/m91937279.html#

    【讨论】:

      【解决方案2】:

      Hibernate 和其他 JPA 提供程序使用 reflection 进行私有成员访问。在 Java 中,与许多 OO 语言一样,可见性声明并未强制执行到无法绕过的严格程度

      【讨论】:

        猜你喜欢
        • 2015-12-15
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 2016-02-14
        • 2011-03-01
        • 2023-03-17
        • 1970-01-01
        相关资源
        最近更新 更多