Java JPA Hibernate中的队列集合映射

Java JPA Hibernate中的队列集合映射,java,hibernate,jpa-2.0,Java,Hibernate,Jpa 2.0,在JPA/hibernate中是否可以有以下集合映射 @OneToMany(cascade={CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE}, fetch=FetchType.LAZY,mappedBy="parent") private Deque<Child> childrens; 我将JPA2.0与Hibernate 3一起使用。不,JPA不支持Deque。在JPA 2.0规范中,以下方式解释了这一点

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

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

private Deque<Child> childrens;

我将JPA2.0与Hibernate 3一起使用。不,JPA不支持Deque。在JPA 2.0规范中,以下方式解释了这一点:

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


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

虽然JPA不支持Mikko提到的Deque,但您可以简单地将代码更新为ArrayQue,这样就可以了

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

private ArrayDeque<Child> childrens;
@OneToMany(cascade={CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.MERGE},
fetch=FetchType.LAZY,mappedBy=“parent”)
私人ArrayDeque儿童;

您看过了吗?为什么希望JPA对象中有一个队列?我很惊讶Hibernate不支持Deque,因为它是集合的扩展,但你几乎肯定可以用列表来做任何你想做的事情。@mbaydar那里的答案似乎表明这是因为他没有使用接口,这里不是这样-Deque是一个扩展集合的接口,Iterable,然后排队。这是一个很好的示例,说明了如何使自己的集合类型可用于Hibernate。最有可能的是,您可以将其调整为与Deque一起使用。
@OneToMany(cascade={CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE},
fetch=FetchType.LAZY,mappedBy="parent")

private ArrayDeque<Child> childrens;