我有一个客户购物应用程序。这些客户有一个包含产品的购物车。这是我使用的带有嵌入的(简化的)映射:
@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() 方法来克服这个问题,但我想知道这个问题是否是由不正确的映射或类似的东西引起的。非常感谢!