0

これは私の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;
}

どうすればこれを実現できますか?

4

1 に答える 1

1

実際、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;
}
于 2013-09-05T21:26:21.993 に答える