Hibernate JPA同一类中两个相同类型的ElementCollections

Hibernate JPA同一类中两个相同类型的ElementCollections,hibernate,jpa,Hibernate,Jpa,我使用JPA2规范和hibernate作为持久性提供者。有人能告诉我如何在同一个类中映射两个相同类型的元素集合吗?例如 public class Employee { @Id //... private Long id; @ElementCollection private Collection<String> tempAddresses; @ElementCollection p

我使用JPA2规范和hibernate作为持久性提供者。有人能告诉我如何在同一个类中映射两个相同类型的元素集合吗?例如

 public class Employee {
     @Id //...
     private Long id;

     @ElementCollection         
     private Collection<String> tempAddresses;

     @ElementCollection         
     private Collection<String> permanentAddresses;

 }
公共类员工{
@Id/。。。
私人长id;
@元素集合
私人收藏地址;
@元素集合
私人收藏永久地址;
}

在加载期间使用默认映射时,hibernate无法区分这两个列表,因为它们是使用相同的联接列(即id列)映射的

编辑1 我忘了提到我的要求是将两个元素集合映射到同一个表,因为它们都是地址。所以映射应该如下所示


公营雇员{
@Id/。。。
私人长id

     @ElementCollection     
     @CollectionTable(name = "ADDRESS", joinColumn = @JoinColumn(name = "EMP_ID"))    
     @Column(name = "ADDRESS_ID")
     private Collection<String> tempAddresses;

     @ElementCollection         
     @CollectionTable(name = "ADDRESS", joinColumn = @JoinColumn(name = "EMP_ID"))    
     @Column(name = "ADDRESS_ID")
     private Collection<String> permanentAddresses;

 }
@ElementCollection
@CollectionTable(name=“ADDRESS”,joinColumn=@joinColumn(name=“EMP\u ID”))
@列(name=“ADDRESS\u ID”)
私人收藏地址;
@元素集合
@CollectionTable(name=“ADDRESS”,joinColumn=@joinColumn(name=“EMP\u ID”))
@列(name=“ADDRESS\u ID”)
私人收藏永久地址;
}

因为两个集合都映射到同一个集合表,并且它们使用相同的id列联接,因此在加载过程中,hibernate无法区分哪些地址是临时的,哪些是永久的

在加载期间使用默认映射时,hibernate无法区分这两个列表,因为它们是使用相同的联接列(即id列)映射的

哦,不!使用默认映射,hibernate将通过将两个列表存储在不同的表中来区分它们

我的要求是将两个元素集合映射到同一个表,因为它们都是地址

它们都是地址。但它们有不同的用途,你显然希望加以区分。如果您使用
@ElementCollection
注释来映射它们,区分它们的明智方法是将它们放在不同的表中


另一种(更传统的)方法是创建地址实体,而不是将它们表示为普通字符串,并使用
@OneToMany
注释将它们连接到Employee类。然后,所有地址都可以在同一个表中,但hibernate将构建连接表,将它们连接到Employee表。仍然会有两个联接表。

在同一个类和同一个数据库表中添加两个相同类型的元素集合。这就是问题所在