2012-02-12 5 views
7

JPAまたはhibernateに、プロパティの代わりにgetId/setIdメソッドを使用するように注釈があることを覚えています。この設定がなければ、getIdはデータベースに当たって、私が望んでいないオブジェクトのすべてのフィールドを埋めます。誰でもそのアノテーションが何であるか知っていますか?hibernate getIdが怠け者であってもオブジェクトをロードしています

例:

public void Project { 
    @Id 
    //Other annotation forcing hibernate to use property get/settter 
    public Long id; 
} 

public Ticket { 
    @ManyToOne(lazy=true) 
    public Project project; 
} 

ので、IDが休止プロジェクトプロキシオブジェクトに既に存在する場合、プロジェクトを取得するためにデータベースをヒットにticket.getProject.getId()の結果。私が覚えている注釈は修正されます。

おかげで、 ディーン

答えて

12

あなたは、プロパティへのアクセスではなく、フィールドへのアクセスを使用してIDにアクセスするために休止状態に指示する必要があり:

@Id 
@Access(AccessType.PROPERTY) 
private Long id; 

あなたが本当にあなたのフィールドを公開するべきではありません。

+0

ここにもう少し詳しくリンクしてください。 http://256.com/gray/docs/misc/hibernate_lazy_field_access_annotations.shtml –

+0

申し訳ありませんが、playframeworkを使用しており、しばらくしてから慣れてきます。私はパブリックフィールドを自分では好きではありませんが、スカラを使用した後、私はjavaがコーディングを減らすようなものを持っていればいいと思います。 –

+0

撮影すると、JPA仕様ではアノテーションがgetIdメソッドに送られなければならないと言われているので、これはそのクラスが存在するすべてのクラスに対して警告を生成しますが、そこを移動すると例外が発生し、まったく動作しません。これらの日はどうやって適切に行うのですか? (私はフィールドでこれを使用していましたが、それは特定の休止状態だったかもしれません)...ありがとう。 –

関連する問題