当前位置: 首页 > 面试题库 >

JPA 2.0多列对多列

易元青
2023-03-14
问题内容

我正在尝试在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
/
。但是我无法正常工作,但出现了一些错误,例如:

  1. 嵌入式ID类不应包含关系映射(实际上,规范中是如此);
  2. 在属性“ employerDeliveryAgent”中,“映射人”值“ pk.deliveryAgent”无法解析为目标实体上的属性;
  3. 在属性“ employerDeliveryAgent”中,“映射人”值“ pk.employer”无法解析为目标实体上的属性。
  4. 无法解析替代属性“ pk.deliveryAgent”的持久类型;
  5. 持久属性的替代属性“ pk.employer”无法解析;

该链接上的许多人说它工作正常,所以我认为我的环境中有些不同,也许是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类。这个类代表的关系,多对多之间EmployerDeliveryAgent

@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 是没有意义的,它们的顺序是不确定的(除非使用所谓的 索引集合 )。 使