2

次のエンティティクラスがあります。メンバー変数宣言の上、またはゲッターとセッターの上にアノテーションを配置できます。

メンバー変数宣言の近くにアノテーションを配置すると、その変数の値(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;
    }
 }
4

2 に答える 2

1

Hibernate およびその他の JPA プロバイダーは、プライベート メンバー アクセスにリフレクションを使用します。Java では、多くの OO 言語と同様に、可視性宣言が厳密に適用されないため、バイパスできません。

于 2013-02-19T11:17:31.370 に答える
1

反射を利用しています。詳細については、この記事を参照してください: http://www.javalobby.org/java/forums/m91937279.html#

于 2013-02-19T11:20:45.240 に答える