@OneToMany和@ElementCollection之间的区别?

n_g*_*n_g 111 java hibernate jpa

使用a @OneToMany@ElementCollection注释有什么区别,因为两者都在一对多关系上工作?

JB *_*zet 146

ElementCollection是一个标准的JPA注释,现在比专有的Hibernate注释更受欢迎CollectionOfElements.

这意味着集合不是实体的集合,而是简单类型(字符串等)的集合或可嵌入元素的集合(带有注释的类@Embeddable).

它还意味着元素完全由包含实体拥有:它们在修改实体时被修改,在实体被删除时被删除等等.它们不能拥有自己的生命周期.

  • ...并且您无法自行查询它们。 (2认同)

MrK*_*ane 103

我相信@ElementCollection主要用于映射非实体(嵌入或基本),同时@OneToMany用于映射实体.那么使用哪一个取决于你想要实现的目标.


Tom*_*icz 57

@ElementCollection当您想要使用简单或嵌入类型实现一对多关系时,可以简化代码.例如,在JPA 1.0中,如果希望与Strings 列表建立一对多的关系,则必须创建一个StringWrapper仅包含主键的简单实体POJO(),并且String问题如下:

@OneToMany
private Collection<StringWrapper> strings;

//...

public class StringWrapper {
  @Id
  private int id;

  private String string;
}
Run Code Online (Sandbox Code Playgroud)

使用JPA 2.0,您只需编写:

@ElementCollection
private Collection<String> strings;
Run Code Online (Sandbox Code Playgroud)

更简单,不是吗?请注意,您仍然可以使用@CollectionTable注释控制表名和列名.

也可以看看:


fid*_*idu 5

基本或嵌入式:@ElementCollection
实体:@OneToMany 或 @ManyToMany

@元素集合:

  • 关系(仅)由定义关系的实体管理
  • 表包含对拥有实体的 id 引用以及基本或嵌入属性

@OneToMany / @ManyToMany:

  • 也可以由其他实体管理
  • 连接表或列通常只包含 id 引用