顧客とのショッピング アプリケーションを持っています。それらの顧客は、製品を含むカートを持っています。これが、私が使用した埋め込み可能オブジェクトとの (簡略化された) マッピングです。
@Entity
class Customer {
@Embedded
private Cart cart;
// Constructors, setters, equals... omitted
}
@Embeddable
class Cart {
@ElementCollection
@JoinTable(name = ...)
private Set<Product> products = new HashSet<>();
...
}
@Embeddable
class Product {
private String name;
...
}
今、HQLで顧客のカートを取得しようとしています。埋め込み可能オブジェクトを直接クエリできないことはわかっていますが、それをフィールドとして選択することを妨げるものは何もありません。
select c.cart from Customer c where c.id = 1
ただし、これにより次の例外が発生します。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at org.hibernate.hql.ast.util.ColumnHelper.generateScalarColumns(ColumnHelper.java:62)
at org.hibernate.hql.ast.tree.DotNode.setScalarColumnText(DotNode.java:661)
at org.hibernate.hql.ast.tree.SelectClause.renderScalarSelects(SelectClause.java:359)
...
この問題は、顧客を取得してその getCart() メソッドをトラバースするだけで解決できましたが、この問題はマッピングの誤りなどによって引き起こされているのでしょうか。どうもありがとう!