java - 如何在非主键上使用 hibernate 注释设置单向一对一关系?

标签 java mysql hibernate jpa join

我设置了一个单向的一对一映射表。这是我的实现的简化版本。

// part of parent table called "Person"
@Id
@Column(name="id")
private String id;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="id", referencedColumnName = "person_id")
private PersonDetails details;

然后...

// part of child table called "PersonDetails"
@Id
@Column(name="id")
private String Id;

@Column(name="person_id")
private String personId;

这似乎不起作用,因为 hibernate sql 日志显示 hibernate 正在尝试在“Person.Id=PersonDetails.Id”上对 Person 和 PersonDetails 进行联接,而我真正想要的是“Person.Id=PersonDetails.personId” ”。

我怎样才能实现这个目标?

最佳答案

我认为您应该将拥有方移至 PersonDetails 中,并将反面使用至 Person 中。这意味着使用双向关联,但我已经在之前的一个项目中成功使用了这种模式:

人:

// part of parent table called "Person"
@Id
@Column(name="id")
private String id;

@OneToOne(mappedBy="person", cascade = CascadeType.ALL)
private PersonDetails details;

人员详细信息:

@Id
@Column(name="id")
private String Id;

@OneToOne
@JoinColumn(name="person_id")
private Person person;

关于java - 如何在非主键上使用 hibernate 注释设置单向一对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24872852/

相关文章:

mysql - 如何正确使用 NOT EXISTS for MySQL?

php - 在 CakePHP 中加入两个过滤器

php - 有人可以检查我的 session 吗?

Java 7 无法收集由 Java 5 收集的永久代

java - 一个类可以实例化自己吗?

java - Java 多线程基准测试

java - 使用 LocalDateTime 的“AttributeConverter 和显式类型不能应用于同一属性”

Tomcat 中的 Hibernate 和 EJB3.1 - 需要什么才能实现这一点?

java - Hibernate 左连接获取许多返回的口是心非

java - NoClassDefFoundError 与 Android 构建路径上的必需项目