我正在为现有的遗留模式使用Hibernate(我无法更新它),有一个奇怪的情况:
表用户:
- db_id主键
- user_id(唯一约束)
1.。其他专栏
表地址
- db_id主键
- user_id(唯一约束)
1..常用地址栏
它们有一一对应的关系。我正在创建以下@Entity
注解类。
class UserEntity {
@Id
@GeneratedValue
private UUID dbId;
private String userId;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", referencedColumnName = "user_id")
private AddressEntity address;
}
class AddressEntity {
@Id
@GeneratedValue
private UUID dbId;
private String userId;
@OneToOne
private UserEntity user;
}
Hibernate认为这是合理的重复列定义。然而,由于在Address表中,我没有将user_id作为FK或PK,我不知道如何将其传达给Hibernate。我试图寻找一个类似的,但没有成功,所以任何建议将不胜感激。
3条答案
按热度按时间0qx6xfy61#
已删除
也许有更好的方法来实现这一点,比如使用
@NaturalId
,但我不能让它与Hibernate 5.2.12.Final一起工作。不过,
@JoinFormula
来拯救:使用MySQL8测试:
用这个快速肮脏的发射器
产生了这些结果:
rwqw0loc2#
一对一关系定义如下:
toe950273#
对于
@OneToOne
关系在两个实体中的使用,当你需要在不存在的列端使用它时,你必须将它Map到相应的字段,所以你可以像这样使用它: