在JPA Hibernate中映射队列集合

时间:2012-04-11 11:24:24

标签: java hibernate jpa-2.0

是否可以在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

2 个答案:

答案 0 :(得分:6)

不,JPA不支持Deque。在JPA 2.0规范中,这将按以下方式解释:

  

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

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

答案 1 :(得分:0)

虽然JPA不支持Mikko提到的Deque,但你可以简单地将代码更新为ArrayDeque,你应该好好去。

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

private ArrayDeque<Child> childrens;