我正在尝试在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:
@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
:
@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>();
这就是全部!祝好运!!
如何用额外的列保存多对多映射对象?专列为“审批”。对于多对多注释,我只调用了setUsersDocuments(users),它工作正常...我怎样才能使它工作与额外的列? 文件 用户类 主键 多对多表 正在保存单据 编辑:unsuccessfull保存对象-Document.GetDocumentsForUsers().Add(userDocuments)null. 编辑:错误 null
问题内容: 我有那个代码。不幸的是,该错误来自,其中包含 错误提示: 然而,当我把它编译出来。那么,如何在不显示错误的情况下显示? 编辑:也许一个更好的问题是你如何显示的? 问题答案: 你可能无法直接执行此操作。从文档list_display 不支持ManyToManyField字段,因为这将需要为表中的每一行执行一个单独的SQL语句。如果仍然要执行此操作,请为模型提供一个自定义方法,然后将该方法
问题内容: 我的数据库包含3个表:User和Service实体具有多对多关系,并与SERVICE_USER表联接在一起,如下所示: 用户-SERVICE_USER-服务 SERVICE_USER表包含附加的BLOCKED列。 执行这种映射的最佳方法是什么?这些是我的实体类 我遵循以下示例http://giannigar.wordpress.com/2009/09/04/m … using-jpa
问题内容: 我有一个班级用户。用户可以与许多其他用户成为朋友。这种关系是相互的。如果A是B的朋友,那么B是A的朋友。我也希望每个关系都存储其他数据,例如两个用户成为朋友的日期。因此,这是同一表上具有多列的多对多关系。我知道应该创建一个中产阶级友谊(包含两个用户ID和日期列)。但是我在将其与Hibernate映射时做得不够。使我停滞不前的是映射到了同一张表。如果多对多关系是在两个不同的表之间,则可以
问题内容: 我有一个包含 产品* 列表的表 订单 。对于与特定订单相对应的每个 产品 ,我需要存储一个 地址 列表,在该 地址 中应将单个产品(每个订单基于每个产品)发送到 * 所以我有这张表,在 订单 和 产品 上有很多很多,我需要的是将上表中的每个条目映射到 地址 列表。所以我需要像 并将上表中的条目映射到地址列表,我需要上述PK和地址ID(我的地址表的主键)上的多对多表 这里PK_Order
问题内容: 我的Java bean与我有很多关系。当我使用如下方式定义变量时: 我得到那个错误: 当我使用时,一切似乎都运行良好。 我想问的是,在使用多对多关系时,哪一个关系用于逻辑概念或(因为列表可能有重复项和集合,但是性能和其他问题又如何)? 问题答案: 从关系数据库的角度来看,这是一个集合。数据库不会保留顺序,并且使用a 是没有意义的,它们的顺序是不确定的(除非使用所谓的 索引集合 )。 使