4

我有一个客户购物应用程序。这些客户有一个包含产品的购物车。这是我使用的带有嵌入的(简化的)映射:

@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() 方法来克服这个问题,但我想知道这个问题是否是由不正确的映射或类似的东西引起的。非常感谢!

4

0 回答 0