2012-05-09 49 views
0

比方說,我們有兩個表,ORDERSOFFERSHibernate JPA有一個映射嗎?

訂購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提供字段一樣,因爲我們不想在持久訂單上修改商品數據。

或者唯一的方法是創建兩個查詢?

回答

2

Orderoffer字段註釋@Transient意味着該字段不會被映射和保留。實際上,您應該映射此字段,但將其設置爲只讀,方法是將其@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; 
} 

要在一個單一的查詢其相關報價沿取的順序,可以使用fetch連接:

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

看起來非常好,請給我一段時間來對其進行測試;) –