Hibernate 如何将复合键中的单个字段映射为另一个实体的主键
我有一个复合键,employee表与address表有一对多的关系Hibernate 如何将复合键中的单个字段映射为另一个实体的主键,hibernate,spring-data,spring-data-jpa,Hibernate,Spring Data,Spring Data Jpa,我有一个复合键,employee表与address表有一对多的关系 @Embeddable class EmployeeDetails { @Column(name="empid") Long empId; @Column(name="empdept") String empDept; } @Entity class Employee { @EmbeddedId EmployeeDetails empDetails; @OneToOn
@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;
}
我想做的是将EmployeeDetails
的empId作为Address
实体中的主键。
但当我进行上述映射时,我得到以下异常:
org.hibernate.MappingException:在org.hibernate.mapping.Table(employee)及其相关的超表和辅助表中找不到逻辑名称为empDetails.empid的列
上面的映射正确吗?@Shikhar:在深入研究异常之前,您试图验证的设计中似乎存在一个很大的缺陷 设计似乎有缺陷,为什么?
祝你好运。ReferenceColumnName=“empid”我问的问题是一个正在运行的应用程序的简化版本。因此,我不能更改数据库的设计,我不允许这样做。除此之外,现在你能提出更好的建议吗?ShikharChaudhary你会发现使用Hibernate实现这个设计有很多困难,你可以选择mybatis或者spring jdbc。