@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连接。