2013-02-19 151 views
2

我有以下实体类。我可以将注释放在成员变量声明的顶部,或者放在getter和setter的顶部。当我将注释放在成员变量声明附近时,它将保存该变量的值(而不是getter返回的值),如果我将注释放在getter附近,它将保存getter返回的值(而不是变量的值) 。这很好。实体类中的Hibernate注释放置

我的问题是,虽然坚持,hibernate如何能够访问成员变量值,虽然它被声明为私有的,当我们把注释放在成员变量的附近。

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

回答

1

休眠和其他JPA提供商使用reflection私人会员访问。在Java中,与许多面向对象语言一样,可视性声明并不严格执行,以至于无法绕过它们。

相关问题