2009年12月14日月曜日

@OneToMany, @ManyToOne

今日2稿目です。
親子関係にある、外部キーを持ったテーブルをEJB3のEntity Beanで表現するために、@OneToMany, @ManyToOneというアノテーションを使います。
決まり文句に近いものなので、押さえておきましょう。
A(1) -------------------> B(*)

○親テーブルA
@Entity
public class A implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Version
private Integer version;

@OneToMany(mappedBy = "a", cascade = CascadeType.REMOVE)
private Set<B> bs;
}

○子テーブルB
@Entity
public class B implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Version
private Integer version;

@ManyToOne(optional = false)
@NotNull
private A a;
}

吐き出されるDDLは以下のようになります。
CREATE TABLE A
(
id bigserial NOT NULL,
"version" integer,
CONSTRAINT a_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);

CREATE TABLE B
(
id bigserial NOT NULL,
"version" integer,
a_id bigint NOT NULL,
CONSTRAINT b_pkey PRIMARY KEY (id),
CONSTRAINT fk26f4fb2dbc3ce1 FOREIGN KEY (a_id)
REFERENCES a (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);

外部キーは自動的に a_id(親テーブル名_id) となります。

0 件のコメント:

コメントを投稿