Hibernate 实体类中的注释放置

标签 hibernate annotations

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

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

我的问题是,在持久化的同时,当我们将注释放在成员变量附近时,hibernate如何能够访问成员变量值,尽管它被声明为私有(private)。?

 @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;
    }
 }

最佳答案

它使用反射。请参阅this article了解更多信息。

关于Hibernate 实体类中的注释放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14955810/

相关文章:

java - 使用 IdClass 连接表

java - hibernate 配置文件中 session 工厂名称属性的用途是什么

java - hibernate "ManyToOne ... references an unknown entity"异常

python - __annotations__ 类中条目的顺序是否与其定义一致?

java - 具有异步数据库调用的 Dropwizard @UnitOfWork

java - 从 3 个表定义 hibernate 实体

java - 没有找到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException bean 配置

java - @Component 和 @Named 都用于同一个 bean 类

java - 将 @Generated 注释添加到 JAXB 生成的类

jakarta-ee - Wildfly 8.1 + EHCache + 注释不起作用