私のプロジェクトには次のマッピングがあります。
@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-entitymanager4.3.4ではサポートされていません。これは私がこれまでに見つけたものです:
@NamedAttributeNode
スーパークラスの属性を参照するために使用することはできません。includeAllAttributes=true
スーパークラスの属性を含むすべての属性が含まれます。@NamedAttributeNode
サブグラフでは、スーパークラスの属性を参照できます。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加