ほとんどの場合、gettersとsetterはIDEによって生成されるため、フィールドに注釈を付ける必要があります。 識別子フィールドに@Id
と注釈を付けると、エンティティのアクセス方法はフィールドベースになります。しかし、私はgetId()
を呼び出すと、エンティティが遅延ロードされている場合に、怠惰な初期化例外を取得したくありません。JPA - アクセスストラテジー
フィールドに注釈を付ける必要がありますが、プロパティベースのアクセス戦略も必要です。どうやってやるの?
私は私のエンティティクラスの上に@Access(AccessType.PROPERTY)
を置いたが、その後、私のJPAプロバイダ、すなわち休止、JPAキャッシュ機能を見てみorg.hibernate.AnnotationException: No identifier specified for entity: ...
もう少し説明してください。なぜこれが必要ですか?プロパティ/フィールドアクセスは、JPAプロバイダがエンティティやアノテーションにどのようにアクセスするかを定義します。アプリケーションの動作ではなく、遅延初期化の問題には関係しません。 – Chris
エンティティまたはそのサンプルを投稿できますか?それ以外の場合は、問題が発生している理由を推測することは困難です。 – ujulu
@Chris、注釈はフィールド上にあるので、hibernateはフィールドにアクセスしますが、idは通常privateであるため、他のクラスはgetId()を呼び出します。エンティティが遅延ロードされている場合、例外が発生します。私はフィールドに注釈を残したいが、問題なくgetIdを呼び出せるようにする。これはidフィールドのためのものです。 – Ramazan