私はこのようなことをしたいです:
@Entity public class Bar {
@Id @GeneratedValue long id;
List<String> Foos
}
次のようなテーブルにFoosを永続化します。
foo_bars (
bar_id int,
foo varchar(64)
);
更新:
他のエンティティをマッピングする方法は知っていますが、多くの場合、やり過ぎです。私が提案していることは、さらに別のエンティティを作成したり、一部のblob列にすべてが含まれたりすることなしには不可能であるように見えます。
これは 休止状態の用語 「値のコレクション」または「要素」にあります。 (Hibernate固有の)アノテーションがあります。 JPAはこれを(まだ)サポートしていません。
つまり、コレクションに次のように注釈を付けます。
@CollectionOfElements
@JoinTable(
table=@Table(name="..."),
joinColumns = @JoinColumn(name="...") // References parent
)
@Column(name="...value...", nullable=false)
これにより、外部キーと制限を備えた必要なテーブルが作成されます。
JPA2を使用している場合、これを行う方法は次のとおりです。
@Entity public class Bar {
@Id @GeneratedValue long id;
@ElementCollection
@CollectionTable(name="foo_bars", joinColumns=@JoinColumn(name="bar_id"))
@Column(name="foo")
List<String> Foos;
}
より明確な例については、 Hibernate Annotationsリファレンスガイド のセクション2.2.5.3.3を参照してください。
リストを配列として保存すると、機能します。
setFoos(String[] foos);
次のように変換できます。
setFoos(myList.toArray(new String[myList.size()]));
ここで、「Foos」は文字列のリストであるため、単方向です。 @ElementCollectionアノテーションを使用して、1つのモデルクラスでこれを行うことができます。
@Entity
@Table(name="bar")
public class Bar {
@Id @GeneratedValue
long id;
@ElementCollection
@JoinTable(
name="foo_bars",
joinColumns = @JoinColumn( name="bar_id")
)
@Column(name="foo")
List<String> Foos;
}
DBでは、bar_idはfoo_barsテーブルの外部キーです。
エンティティ「FooBars」を作成する
属性「Foos」をリファクタリングして
@OneToManyリストFoos
私はそれがあなたが必要とするものだと思います:
@Entity
public class Bar {
@Id @GeneratedValue long id;
@OneToMany(mappedBy="bar") //"bar" = field name in mapping class
List<FooBar> Foos;
}
@Entity
public class FooBar {
@Id @GeneratedValue long id;
@ManyToOne
@JoinColumn(name="bar_Id")
Bar bar;
}