@OneToMany和@ElementCollection之间的区别?
使用@OneToMany
和@ElementCollection
注释之间有什么区别,因为两者都工作在一对多的关系?
我相信@ElementCollection
主要用于映射非实体(可embedded或基本),而@OneToMany
用于映射实体。 那么使用哪一个取决于你想要达到的目标。
ElementCollection
是一个标准的JPA注释,现在比专有的Hibernate注释CollectionOfElements
。
这意味着集合不是实体的集合,而是一系列简单types(string等)或可embedded元素(用@Embeddable
注解的类)的集合。
这也意味着元素完全由包含实体拥有:它们在修改实体时被修改,在实体被删除时被删除等。它们不能有自己的生命周期。
@ElementCollection
允许你简化代码,当你想实现一对多的关系,简单或embedded式。 例如,在JPA 1.0中,当你想与String
的列表有一对多的关系时,你必须创build一个简单的实体POJO( StringWrapper
),它只包含主键和String
:
@OneToMany private Collection<StringWrapper> strings; //... public class StringWrapper { @Id private int id; private String string; }
使用JPA 2.0,你可以简单地写:
@ElementCollection private Collection<String> strings;
更简单,不是吗? 请注意,您仍然可以使用@CollectionTable
批注控制表名和列名称。
也可以看看:
- Java Persistence / ElementCollection
@ElementCollection
标记一个集合。 这并不一定意味着这个集合引用了1-n连接。
- ConcurrentModificationException和一个HashMap
- 使用JPA / Hibernate计算属性
- 如何使用JPA2的@Cacheable而不是Hibernate的@Cache
- 禁用上下文LOB创build为createClob()方法抛出错误
- JPQL构造函数expression式 – org.hibernate.hql.ast.QuerySyntaxException:表未映射
- 将Hibernate Query.list()转换为List <Type>的“正确”方法是什么?
- PersistenceContext EntityManager注入NullPointerException
- 做一对一关系懒
- 为Hibernate表和列自动保留字转义