用于扩展List的接口的Hibernate Mapping

时间:2018-01-09 12:38:48

标签: java hibernate jpa

Hibernate是否有可能拥有这样的东西:

public interface FooList extends List<Bar> {}

然后使用@OneToMany

将其映射到一个班级
public class Baz {
    @OneToMany
    FooList fooList;
}

当我尝试这样做时,我得到:

  

非法尝试将非集合映射为@OneToMany,@ ManyToMany或@CollectionOfElements

2 个答案:

答案 0 :(得分:1)

根据此文档 - &gt; link,只允许一组特定的集合接口。否则,需要实施UserCollectionType

  

Hibernate使用自己的集合实现,这些集合实现了丰富   使用延迟加载,缓存或状态更改检测语义。

     

有关   这个原因,必须将持久集合声明为接口   类型。

     

实际界面可能是 java.util.Collection ,    java.util.List,java.util.Set,java.util.Map,java.util.SortedSet,    java.util.SortedMap 甚至其他对象类型(意味着您将拥有   写一个实现   org.hibernate.usertype.UserCollectionType)。

链接引用版本5.2但是此约束也存在于3.x版本之后。

答案 1 :(得分:1)

来自docs

  

作为要求,持久性集合值字段必须被声明为接口类型。实际界面可能是 java.util.Set java.util.Collection java.util.List java.util .Map java.util.SortedSet java.util.SortedMap 或您喜欢的任何内容(“您喜欢的任何内容”表示您必须编写 org.hibernate.usertype.UserCollectionType 的实现。

因此,在编写UserCollectionType

的实现之前,您无法映射自定义集合