当前位置: 首页 > 知识库问答 >
问题:

如何将复合键内的单个字段映射为另一实体的主键

楚洋
2023-03-14
@Embeddable
class EmployeeDetails {
    @Column(name="empid")
    Long empId;
    @Column(name="empdept")
    String empDept;
}

@Entity
class Employee {

    @EmbeddedId
    EmployeeDetails empDetails;

    @OneToOne (mappedBy = "employee")
    Address address;
}

@Entity
class Address {
    String permanentAddrs;
    @Id
    @OneToOne
    @JoinColumn(name = "empId", referencedcolumnname = "empDetails.empid")
    Employee employee;
}

上面的映射正确吗?

共有1个答案

竺捷
2023-03-14

@Shikhar:在深入到异常之前,你试图影响的设计中看起来有一个很大的缺陷。

设计看起来是一个错误的,为什么?

  1. 您在Employee和address之间创建了1:M关系,并且您试图在address表中使用empId作为主键。这是完全错误的。
  2. 您试图实现的是,您希望使用组合键列之一(即empId)作为Address表中的FK。这看起来在逻辑上是错误的。
 类似资料:
  • 我试图理解hibernate中两个实体之间的一个映射,同时还有一个条件,即主键(以及外键)必须是复合的。 Hibernate:删除表UserInfo(如果存在) Hibernate:alter table UserInfo add constraint FKlbuhulsmr2lghirdvem61b9lb外键(XYZ_ID,ABC_Num)引用车辆 简而言之,是拥有方实体,并且与实体(以comp

  • 我在jpa/Hibernate中映射复合键时遇到了问题。父实体和子实体都具有复合主键。 在运行时保存它时会出现以下异常: 我认为这是虚假的,因为有getter和setter。如果在priceRequestLegModel上使用mappedby=“leg”,在allocationModel上使用@mapsid,也会出现同样的错误。有人能指出我在这里做错了什么吗?

  • 我有一个表,有一个复合PK:Customer;我有一个视图,没有PK:Purchase 为了绑定我的实体,Hibernate强制我声明一个PK。所以我为购买创建了一个复合PK。 普切斯: 普查塞普克:

  • 在child_tableparent_id列作为外键和复合主键的一部分。 Embedded类内部无法使用标识生成器。所以我在这里使用ID类。为child_id列生成自动增量值。 我无法将parent_table生成parent_id值作为外键值存储在child_table中,它存储为0。 有人能检查一下地图吗?帮帮我…… 提前致谢...

  • 问题内容: 我在这里搜索,但未找到任何类似的主题,因此我发布了一个新问题。 我正在使用现有数据库上的Hibernate。我们不允许更改表的结构和数据。该应用程序正在从数据库读取数据,并根据某种逻辑迁移到另一个数据存储。 现在的问题是关于复合PK映射。例如 表A具有复合PK。 表B也有一个复合PK,此复合PK的一部分是A的PK,此处也用作FK。 我尝试了几种方法,但都无济于事。谁能告诉一个有效的Hi

  • 我有2个表,即user和user_session。