我有這樣的映射:爪哇休眠麻煩
實體1實體2實體3
而實體4個
實體編號1,2和3具有實體的清單4. 實體4具有隻有2字段的:一個字符串(數據)和我設置爲@Id和@GeneratedValue的ID
在保存實體4數據的數據庫表中,我不想讓字符串(數據)重複。
但實體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喜
2喂
3音樂
4電視
5沙發
6 wii
7 otherStr荷蘭國際集團
什麼我得到是:
ID字符串
1喜
2喂
3音樂
4電視 5喜 6沙發
7沙發 8的Wii
9音樂
10 otherString
數據被複制。當我嘗試使用@Id註釋來提供字段字符串時,當我嘗試使用已存在的List中的字符串保存實體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();
}