4

是否可以在 JPA / hibernate 中有以下集合映射

@OneToMany(cascade={CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE},
fetch=FetchType.LAZY,mappedBy="parent")

private Deque<Child> childrens;

它抛出错误

Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements

我正在将 JPA 2.0 与 Hibernate 3 一起使用

4

2 回答 2

8

不,JPA 不支持双端队列。在 JPA 2.0 规范中,这是通过以下方式解释的:

集合值持久字段和属性必须根据以下集合值接口之一定义,无论实体类是否遵守上述 JavaBeans 方法约定以及是否使用字段或属性访问: java.util.Collection , java.util.Set, java.util.List[3], java.util.Map。应用程序可以使用集合实现类型在实体持久化之前初始化字段或属性。一旦实体被管理(或分离),后续访问必须通过接口类型。

我建议添加到提供所需 Deque 功能的实体方法(或将视图作为 Deque 公开到持久列表)。其他可能性是评论中建议的自定义集合(Thor84no)。

于 2012-04-11T18:14:04.730 回答
0

虽然 JPA 不支持 Mikko 提到的 Deque,但您可以简单地将代码更新为 ArrayDeque,您应该一切顺利。

@OneToMany(cascade={CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE},
fetch=FetchType.LAZY,mappedBy="parent")

private ArrayDeque<Child> childrens;
于 2016-11-24T19:58:27.697 回答