0

次のエンティティ間の双方向マッピングをどのように定義しますか?

@Entity
class Host {
    @Id 
    String id;

    HaGroup haGroup;  // needs mapping
}

@Entity
class HaGroup {
    @Id 
    String id;

    @OneToOne(optional = false)
    @JoinColumn(name = "primary_host_id")    
    Host primary;

    @OneToOne(optional = false)
    @JoinColumn(name = "secondary_host_id")
    Host secondary;
}

HaGroup がアソシエーションの所有者であるべきだと思うので、ここでは @JoinColumn がうまく機能しますが、私は逆方向に固執しました。Host オブジェクトに入れたいのは、ホストが (プライマリまたはセカンダリ ホストとして) 属している HaGroup への参照、または HaGroup のメンバーでない場合は null への参照です。

これを優雅に行う方法はありますか?

ホストおよび HaGroup DB テーブルは次のように定義されます。

CREATE TABLE host
(
  id character(32) NOT NULL,
  CONSTRAINT host_pkey PRIMARY KEY (id ),
)

CREATE TABLE ha_group
(
  id character(32) NOT NULL,
  primary_host_id character(32) NOT NULL,
  secondary_host_id character(32) NOT NULL
  CONSTRAINT ha_group_pkey PRIMARY KEY (id ),
  CONSTRAINT fk_ha_group_p_host_dc FOREIGN KEY (primary_host_id)
      REFERENCES host (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE,
  CONSTRAINT fk_ha_group_s_host_dc FOREIGN KEY (secondary_host_id)
      REFERENCES host (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE,
)
4

1 に答える 1

0

ホスト側からどのような関係を持ちたいかによって異なります。以下のようなデザインを提案します

@Entity
class Host {
    @Id 
    String id;

    HostType type;// this is a enum with values(PRIMARY,SECONDARY)
    @ManyToOne
    HaGroup haGroup;  // needs mapping
}

@Entity
class HaGroup {
    @Id 
    String id;

    @OneToMany(mappedBy="haGroup")
    @JoinColumn(name = "primary_host_id")    
    List<Host> hostList;

}
于 2013-06-07T10:11:19.127 に答える