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

时间:2018-05-03 05:18:29

标签: hibernate spring-data spring-data-jpa

我有一个复合键,employee表与地址表有一对多的关系。

with_vs = py.helper.With(py.tensorflow.variable_scope('X'));
with_vs.get().name
...
clear with_vs;

我想要做的是将@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; } 的empId作为EmployeeDetails实体中的primaryKey。 但是当我做上面的映射时,我会遇到以下异常:

  

org.hibernate.MappingException:无法找到具有逻辑名的列:org.hibernate.mapping.Table(employee)中的empDetails.empid及其相关的supertables和secondary tables

上述映射是否正确?

1 个答案:

答案 0 :(得分:0)

@Shikhar:在深入了解异常之前,你想要设计的设计看起来有一个很大的缺陷。

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

  1. 您在Employee和地址以及地址表中创建了1:M关系 您正在尝试将empId用作主键。 这是完全错误的。
  2. 您要实现的目标是,您希望使用复合键列之一(即empId)作为Address表中的FK。 这在逻辑上是错误的。
  3. 祝你好运。