如何使用hibernate JPA注释映射嵌套集合Map <Key,List >?
我有一节课,我不确定如何正确注释。
我对Holder :: data的目标:
- 列表应该不是通过比较器而是通过数组中元素的自然顺序来维护顺序。 (如果有帮助,可以是ndx列。)
- 持有人将拥有唯一的数据参考,因此Cascade all也可能适用。
我也愿意采用不同的设计来移除地图,如果这样可以实现更清洁的设计。
@Entity public class Holder extends DomainObject { private Map<Enum,List> data; } @Entity public class Element extends DomainObject { private long valueId; private int otherData; } @Mappedsuperclass public class DomainObject { // provides id // optimistic locking // create and update date }
我不认为用hibernate(-core)映射任何集合集合是可能的:
集合可能包含几乎任何其他Hibernate类型,包括所有基本类型,自定义类型,组件,当然还有对其他实体的引用。
(来自官方文件 )
注意几乎和遗漏的集合类型。
解决方法:您需要在集合持有者和元素之间引入一种新类型。 您可以将此类型映射为实体或组件,它引用地图的原始内容,在本例中为列表。
就像是:
@Entity public class Holder extends DomainObject { @OneToMany private Map inBetweens; } @Entity public class InBetween extends DomainObject { @OneToMany private List elements; } @Entity public class Element extends DomainObject { private long valueId; private int otherData; } @Mappedsuperclass public class DomainObject { // provides id // optimistic locking // create and update date }
映射的其余部分取决于您的特定情况,但相当简单。
这是一个关于hibernate中集合集合的博客http://blog.xebia.com/2007/10/05/mapping-multimaps-with-hibernate/
希望它会有所帮助。 它帮助了我。
此致,安东
请注意,Hibernate文档的引用链接似乎已过时,我发现以下工作: http : //docs.jboss.org/hibernate/core/3.5/reference/en/html/collections.html
- Spring 3.1.1用hibernate 4.1注释配置
- @ParametersAreNonnullByDefault是否也适用于方法返回值?
- java.lang.IllegalStateException:BindingResult和bean名称’category’的普通目标对象都不能作为请求属性使用
- 基于注释的ServiceLocatorFactoryBean?
- 当我使用autowire和组件注释时,不会注入或创建我的spring bean
- 在Spring 3中组织类进行组件扫描的智能方法是什么?
- IntelliJ IDEA抱怨@NotNull参数的空检查
- 使用Jersey 1.x自定义注释注入
- 如果我们在spring MVC中交换@service和@repository注释会发生什么