嵌入類更新元素集合休眠失敗在數據庫
@Embeddable
public class TeachingExperience {
private String courseName;
private String instructor;
private String description;
}
實體1
@Entity
public class CV {
@ElementCollection(fetch= FetchType.EAGER)
@Fetch(value = FetchMode.SELECT)
private List<TeachingExperience> teachingExperiences;
}
實體2
@Entity
public class Student {
@OneToOne(cascade= CascadeType.ALL, orphanRemoval=true)
private CV cv;
}
CV類存儲一個人的教學體驗列表。還有其他領域,應該熱切地提取,因此@Fetch註釋。
我用這個方法,將新的教學經驗加入到給定的學生的簡歷:
public static void add (String course, String prof, String desc) {
TeachingExperience TE = new TeachingExperience(course, prof, desc);
student.getCv().getTeachingExperiences().add(TE);
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.merge(student);
session.getTransaction().commit();
session.close();
}
,每次我嘗試添加一個新的教學經歷這種配置,存儲在數據庫表中的數據,先被複制,然後插入新條目。我的數據庫表在兩次連續的方法調用後看起來像這樣:
add('DS','Feili','TA');
- DS Feili TA
加( 'AP', 'Ramtin', 'TA');
- DS Feili TA
- DS Feili TA
- AP Ramtin TA
我有同樣的問題時,試圖刪除對象形成教學經驗的名單,我不知道這是我的代碼部分的這種古怪行爲的根源。
我們將非常感謝您的幫助。
編輯1:
@Entity
public class TeachingExperience {
@Id @GeneratedValue
private Integer id;
private String courseName;
private String instructor;
private String description;
}
@Entity
public class CV {
@OneToMany(fetch= FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval=true)
@Fetch(value = FetchMode.SELECT)
@JoinColumn(name="cv")
private List<TeachingExperience> teachingExperiences;
}
我認爲你應該將'TeachingExperience'設置爲'Entity',並嘗試'update()'而不是'merge()'。請讓我知道這些更改後會發生什麼! – boomz
@boomz,謝謝你的回覆。我已經將TeachingExperience改爲實體(編輯1)。 有趣的是,在將merge()更改爲update()之後,我的原始問題已解決,但又出現了另一個問題;從教學體驗列表中刪除項目不會傳播到數據庫表。 – mdoust