我的项目中有以下映射:
@Embeddable
class LineItem {
...
}
@Entity
abstract class Invoice {
...
@ElementCollection @OrderColumn @NotEmpty
List<LineItem> lineItems = []
...
}
@Entity
class PurchaseInvoice extends Invoice {
...
@OneToOne(cascade=CascadeType.ALL, orphanRemoval=true)
Payment payment
...
}
@Entity
class Payment {
...
@ElementCollection @OrderColumn
List<PaymentTerm> paymentTerms = []
...
}
@Embeddable
class PaymentTerm {
...
}
默认情况下,所有集合关联都是惰性的。我的目标是创建一个实体图,该图可用于热切加载PurchaseInvoice.lineItems
和PurchaseInvoice.payment.paymentTerms
。
如果我定义以下实体图:
@NamedEntityGraph(name='PurchaseInvoiceWithDetail', attributeNodes = [
@NamedAttributeNode(value='payment', subgraph='payment'),
@NamedAttributeNode(value='lineItems')
], subgraphs = [
@NamedSubgraph(name='payment', type=Payment, attributeNodes = [
@NamedAttributeNode(value='paymentTerms')
])
])
@Entity
class PurchaseInvoice extends Invoice
我收到以下无法建立实体管理器的工厂错误:
java.lang.IllegalArgumentException: Unable to locate Attribute with the given name [lineItems] on this ManagedType [PurchaseInvoice]
在JPA 2.1实体图中引用超类(或子类)中的属性的正确方法是什么?
从hibernate-entitymanager 4.3.4开始不支持此功能。这是我到目前为止发现的:
@NamedAttributeNode
不能用于引用超类的属性。includeAllAttributes=true
将包括所有属性,包括超类的属性。@NamedAttributeNode
子图中的可以引用超类的属性。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句