mysql - 如何将一个实体编码为另一个实体?

标签 mysql hibernate entity

这就是我的 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/

相关文章:

orm - Eclipselink - 坚持后的ID仍然为空

php - Symfony2 Doctrine 从类别中获取随机产品

php - 计数记录在数据库表中出现的最大次数

mysql - Doctrine 2 DQL MySQL 等同于 ROUND()?

java - 使用 Spring 3 生成在 Postgres 中使用游标的 sql

mysql - JBoss 7.1.1 中的 java.lang.ClassNotFoundException : com. mysql.jdbc.Driver - 出了什么问题?

html - 在 HTML5 中使用 null 实体(例如 &#x0;)是否有效?

mysql - 计算一列在另一列中出现的次数

mysql - 两列,相同的数据,不同的Where子句

java - 如何确保使用 Hibernate 更新的值在我阅读后没有被更改?