私はこのマッピングを持っています:
エンティティ 1 エンティティ 2 エンティティ 3
そしてエンティティ4
エンティティ番号1、2、および3には、エンティティ4のリストがあります。エンティティ4には、文字列(DATA)と@Idおよび@GeneratedValueに設定されたIDの2つのフィールドしかありません
Entity 4 データを保持するデータベース テーブルで、String(DATA) を複製したくありません。
ただし、エンティティ 1、2、および 3 は、それらの間でエンティティ 4 のリストに重複データを持つことができます。
例 (インスタンスは、指定されたエンティティのオブジェクトです):
Instance 1 (Entity 1): List: ["hi","hello","music"]
Instance 2 (Entity 2): List: ["tv","hi","sofa"]
Instance 3 (Entity 2): List: ["sofa","wii"]
Instance 4 (Entity 3): List: ["music","otherString"];
エンティティ 4 のデータベース テーブル エントリは次のとおりです
。ID 文字列
1 hi
2 hello
3 music
4 tv
5 sofa
6 wii
7 otherString
私が得ているのは:
ID 文字列
1 こんにちは
2 こんにちは
3 音楽
4 テレビ 5 こんにちは 6 ソファ
7 ソファ 8 wii
9 音楽
10 otherString
データが複製されます。@Id アノテーションを使用してフィールド文字列を指定しようとすると、エンティティ 1、2、または 3 のインスタンスをリストに既に存在する文字列で保存しようとすると、エンティティ 4 の重複エントリ エラーが送信されます。エンティティ 1、2、または 3 を保存しないでください。
これに正しく注釈を付けるにはどうすればよいですか?
私のコードの一部:
エンティティ 1、2、または 3 (コードのこの部分ではすべて同じです):
@Entity
public class Entity1 {
private List<Entity4> entity4List;
@OneToMany(targetEntity=Entity4.class,cascade =CascadeType.ALL)
public List<Entity4> getEntity4List() {
return entity4List;
}
}
エンティティ 4:
@Entity
public class Entity4 {
private long id;
private String stringn;
@Id
@GeneratedValue
public long getId() {
return id;
}
}
そして、エンティティ 1、2、または 3 を保存する Hibernate コード:
public void addEntity1(ArrayList<String> list){
List<Entity4> L = new ArrayList<Entity4>();
for(String s:list)
{
L.add(new Entity4(s));
}
Entity1 e=new Entity1(L);
Session session = sf.getCurrentSession();
session.beginTransaction();
session.save(e);
session.getTransaction().commit();
}