我正在为现有的旧模式使用Hibernate(我无法更新它,并且有一个奇怪的情况:
表用户:
表地址
这些具有一对一的关系。我正在创建以下@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认为这是重复的列定义,这是合理的。但是,由于在地址表中我没有user_id作为FK或PK,所以我不确定如何将此信息传达给Hibernate。我曾尝试寻找类似但没有成功的方法,因此任何建议将不胜感激。
有一些错误:
@Entity
和@Table
(但您的代码中可能已经包含了它们)private UUID dbId
不会映射到db_id
列@OneToOne
错误Address.userId
不应该存在尝试这些:
@Entity
@Table(name = "T_USER")
public class UserEntity
{
@Id
@Column(name = "DB_ID")
private UUID dbId;
@Column(name = "USER_ID")
private String userId;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private AddressEntity address;
}
@Entity
@Table(name = "T_ADDRESS")
public class AddressEntity
{
@Id
@Column(name = "DB_ID")
private UUID dbId;
@OneToOne
@JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")
private UserEntity user;
}