我有以下幾個層次JPA TABLE_PER_CLASS問題多對一
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Order {
...
@Entity
@Table(name = "b_order", schema = "public")
public class BOrder extends Order implements java.io.Serializable {
...
@Entity
@Table(name = "s_order", schema = "public")
public class SOrder extends Order implements java.io.Serializable {
我也有tr之後雙方的具體子類的引用
@Entity
@Table(name = "tr", schema = "public")
public class Tr implements java.io.Serializable {
...
private SOrder sOrder;
private BOrder bOrder;
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "s_order_id", nullable = false)
public SOrder getSOrder() {
return this.sOrder;
}
... same for BOrder
定義爲上述延遲加載作品類的類罰款:
Tr foundTr = trDAO.findById(trId);
// test lazy loading BOrder, SOrder
BOrder foundBOrder = foundTr.getBOrder();
SOrder foundSOrder = foundTr.getSOrder();
assertNotNull(foundSOrder);
assertNotNull(foundBOrder);
但是,如果我嘗試執行多態查詢它不起作用:
public List<Order> getOrdersByUId(Long uId) {
return (List<Order>) em.createQuery(//
" select o from Order o " //
+ " order by o.created desc ") //
.getResultList();
我得到一個錯誤:
基於這個帖子Order is not mapped
:http://java.dzone.com/articles/jpa-implementation-patterns-mapping
BTW, when using Hibernate proxies, be aware that lazily loading a class mapped with any of the three strategies above always returns a proxy that is an instanceof the superclass. Blockquote
其奇怪的行爲,我看到的相匹配。
但是,這是奇怪的地方。如果我父類更改爲
@Entity
// @MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Order {
這是我註釋掉MappedSuperClass註釋,多態查詢作品(創建正確工會)。 問題是當我這樣做時,從Tr到兩個子類的LAZY加載停止工作。
任何想法?我可以使用本機查詢來執行聯合而不是JPA嗎?
我到JBoss 6.0.0使用JPA 2.0使用Hibernate - 任何版本附帶的JBoss
我想你說得對。我遇到了類似的問題,爲@Entity交換@ MappedSuperClass修復了它。我從來沒有直接詢問具體的實現,但查詢父母沒有爲我工作......直到現在。 – spaaarky21