2013-02-19 96 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中,與許多面向對象語言一樣,可視性聲明並不嚴格執行,以至於無法繞過它們。

相關問題