我正在尝试在JPA 2.0(JBoss 7.1.1)中建立一个ManyToMany关系,并在该关系中增加一列(下面的粗体字),例如:
Employer EmployerDeliveryAgent DeliveryAgent (id,...) (employer_id, deliveryAgent_id, **ref**) (id,...)
我不想有重复的属性,因此我想应用http://giannigar.wordpress.com/2009/09/04/mapping-a-many-to- many-join-table中提供的第二种解决方案与额外的列一起使用jpa /。但是我无法正常工作,但出现了一些错误,例如:
该链接上的许多人说它工作正常,所以我认为我的环境中有些不同,也许是JPA或Hibernate版本。所以我的问题是:如何使用JPA 2.0(Jboss 7.1.1 /使用Hibernate作为JPA实现)实现这种情况?并补充这个问题:我应该避免使用组合键,而是使用普通生成的ID和唯一约束吗?
提前致谢。
观察:我没有在这里复制源代码,因为它本质上是上面链接中的源代码的副本,只是具有不同的类和属性名称,因此我认为没有必要。
首先,您需要生成一个EmployerDeliveryAgentPK类,因为它具有多个PK:
EmployerDeliveryAgentPK
@Embeddable public class EmployerDeliveryAgentPK implements Serializable { @Column(name = "EMPLOYER_ID") private Long employer_id; @Column(name = "DELIVERY_AGENT_ID") private Long deliveryAgent_id; }
接下来,您需要创建一个EmployerDeliveryAgent类。这个类代表的关系,多对多之间Employer和DeliveryAgent:
EmployerDeliveryAgent
Employer
DeliveryAgent
@Entity @Table(name = "EmployerDeliveryAgent") public class EmployerDeliveryAgent implements Serializable { @EmbeddedId private EmployerDeliveryAgentPK id; @ManyToOne @MapsId("employer_id") //This is the name of attr in EmployerDeliveryAgentPK class @JoinColumn(name = "EMPLOYER_ID") private Employer employer; @ManyToOne @MapsId("deliveryAgent_id") @JoinColumn(name = "DELIVERY_AGENT_ID") private DeliveryAgent deliveryAgent; }
之后,在Employer课堂上,您需要添加:
@OneToMany(mappedBy = "deliveryAgent") private Set<EmployerDeliveryAgent> employerDeliveryAgent = new HashSet<EmployerDeliveryAgent>();
在DeliveryAgent课堂上,您需要添加:
@OneToMany(mappedBy = "employer") private Set<EmployerDeliveryAgent> employer = new HashSet<EmployerDeliveryAgent>();
这就是全部!祝好运!!