2012-05-09 18 views
0

のは、我々は2つのテーブルORDERSOFFERSHibernate JPA hasOneマッピング?

注文POJOを持っているとしましょう

@Entity 
@Table(name = "ORDERS") 
public class Order { 

    @Column(columnDefinition = "serial") 
    private @Id Integer id; 
    private @NotNull @Email String ownerEmail; 
    private @NotNull Integer offerId; 
} 

オファーPOJO

@Entity 
@Table(name = "OFFERS") 
public class Offer { 

    @Column(columnDefinition = "serial") 
    private @Id Integer id; 
    private @Email @NotNull String ownerId; 
} 

それはEntityManagerのOrder by ID上の単一のクエリでフェッチすることが可能ですので、結果に関連するOfferオブジェクトが含まれることを確認しますか?

永続オーダーのオファーデータを変更したくないため、オーダーの@Transient Offerフィールドを作成するようにします。

唯一の方法は2つのクエリを作成することですか?

答えて

2

@TransientofferフィールドにOrderの注釈を付けると、このフィールドはマップされずに保持されます。実際には、このフィールドをマップする必要がありますが、@Column.insertable()@Column.updatable()をfalseに設定して読み取り専用にしてください。

@Entity 
@Table(name = "ORDERS") 
public class Order { 

    @Column(columnDefinition = "serial") 
    private @Id Integer id; 
    private @NotNull @Email String ownerEmail; 

    private @NotNull Integer offerId; 

    @Column(insertable=false , updateable=false) 
    private Offer offer; 
} 

単一のクエリでその関連のオファーと一緒にオーダーを取得するには、参加フェッチ使用することができます。

SELECT order FROM Order order join fetch order.offer 
+0

は非常によさそうだが、それをテストするために私にしばらく与えてください。) –

関連する問題