这就是我的 SQL 表的样子:
CREATE TABLE IF NOT EXISTS `test`.`Families` (
`id` INT NOT NULL AUTO_INCREMENT,
`mother_id` INT DEFAULT NULL ,
`father_id` INT DEFAULT NULL ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `test`.`Parents` (
`id` INT NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(50) DEFAULT NULL,
`last_name` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
这就是我的家庭实体的样子:
@Entity
@Table(name="Families")
public class Family implements Serializable {
@Id
@Column(name="id")
private String id;
@Column(name="mother_id")
private int mother;
@Column(name="father_id")
private int father;
}
这很棒,但如果我能做这样的事情,我真的很喜欢(注意我也已经定义了一个父实体):
@Entity
@Table(name="Families")
public class Family implements Serializable {
@Id
@Column(name="id")
private String id;
@OneToOne
@Column(name="mother_id")
private Parent mother;
@OneToOne
@Column(name="father_id")
private Parent father;
}
我怎样才能做到这一点?
最佳答案
实际上,Hibernate 会为您做所有事情。
- 您无需使用
@Column
来注释已经具有@OneToOne
或其他关联注释的列 - 如果您想使用默认外键(默认名称由
field
+_id
组成)以外的其他键,则应使用@JoinColumn
注释
@Entity
@Table(name="Families")
public class Family implements Serializable {
@Id
@Column(name="id")
private String id;
@OneToOne
@JoinColumn(name = "mother_idd")
private Parent mother;
@OneToOne
@JoinColumn(name = "father_idd")
private Parent father;
}
关于mysql - 如何将一个实体编码为另一个实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18645886/