2016-07-28 6 views
2

私のデータベースにリビジョンがあるドキュメントがあります。ドキュメントテーブルには、ドキュメントに共通のメタデータが含まれており、リビジョンにはコンテンツが含まれています。現在、正しいリビジョンの文書を入手できます。ManyToOne関係の逆の側のアイテムのリスト

私がしたいのは、マッピングのすべてのリビジョンでDocumentsのリストを取得することです。ここで

は私の2 entitysです:

@Entity 
public class Document { 
    @Id 
    @Column(name="DOCUMENT_ID") 
    private int id; 

    @ManyToOne 
    @JoinColumn(name="DOCUMENT_REVISION_ID") 
    private DocumentRevisionEntity revision; 
} 

@Entity 
public class DocumentRevisionEntity { 
    @Id 
    @Column(name="DOCUMENT_REVISION_ID") 
    private int id; 

    @Column(name="DOCUMENT_ID") 
    private int documentId 
} 

だから私はリビジョンのすべてを照会するが、戻り値の型はDocumentであることがしたいJPAクエリの種類。

+0

どういう意味ですか? "リスト"すべてのリビジョンで "??あなたは、各文書の異なるリビジョンを含む文書のリストを得ることを意味しますか? –

+0

@CarlitosWayはい、申し訳ありませんが、修正するつもりですが、アイデアはすべてのリビジョンを取得したいのですが、それらを「ドキュメント」として取得したいと考えています。 –

+0

私はうまく理解できません...あなたが望むことができます: 'SELECT Document doc WHERE doc.revision IN(listOfRevisions)'?もしそうなら、私は – Dherik

答えて

1

簡単な方法は、あなたのDocumentエンティティを変更することです。

あなたが例...それはDocumentインスタンスに関連付けられているすべてのリビジョンを代表するList<DocumentRevisionEntity>を追加する必要があります。

@Entity 
public class Document { 
@Id 
@Column(name="DOCUMENT_ID") 
private int id; 

@ManyToOne 
@JoinColumn(name="DOCUMENT_REVISION_ID") 
private DocumentRevisionEntity revision; // This is the last revision! 

@OneToMany 
@JoinColumn(name="DOCUMENT_ID") // unidirectional one-to-many, works for JPA2.0!! 
private List<DocumentRevisionEntity> revisions = new ArrayList<>(); 
} 

あなたが永続化層からドキュメントを取得するときに、あなたはそのも取得することができます関連するリビジョン!

BEWARE!デフォルトでは、@ OneToManyリレーションはLAZYであり、必要なときにのみロードされます! (これはEntityManagerによって管理されるDocumentエンティティからgetRevisions()メソッドを呼び出すときです)。コンテキストによっては、この設定により副選択問題が発生することがありますので、ご注意ください。

あなたのエンティティを変更したくない場合は...あなたはこのクエリをテストすることができます。

SELECT doc, rev FROM Document doc, DocumentRevisionEntity rev WHERE doc.id = rev.documentId

ただし、お電話:query.getResultList()をこのクエリから。 array [0] = Document、array [1] = DocumentRevisionEntity ...多くのバージョンのドキュメントがある場合、これらのドキュメントは結果リストで繰り返されます。

+0

エクササイズは別のプロパティを追加しないようにすることでしたが、もし私がしなければならないのは、思考実験で、そのクエリをテストして何が起こるかを見てみましょう。 –

+0

うわー、そのクエリは期待どおりに動作します。きちんとありがとう! –

関連する問題