我有一個Employee類,它與Technology類具有單向多對多關係。當我向Employee添加技術併合並員工時,記錄將被添加到連接表中。合併不會從連接表中刪除
但是,當我嘗試通過合併員工來刪除技術時,更改不反映在數據庫上。
Employee.class
@Entity
@Table(name = "EMPLOYEES")
public class Employee implements Serializable {
@JoinTable(name = "EMPLOYEES_TECHNOLOGIES",
joinColumns =
@JoinColumn(name = "EMP_USERNAME", referencedColumnName = "USERNAME", table = "EMPLOYEES"),
inverseJoinColumns =
@JoinColumn(name = "TEC_ID", referencedColumnName = "ID", table = "TECHNOLOGIES"))
private List<Technology> technologies;
EmployeeEAOImpl.class
@Stateless(name = "EmployeeEAO")
public class EmployeeEAOImpl implements EmployeeEAO {
@PersistenceContext(unitName = "ManagedITest")
private EntityManager em;
@Override
public void update(Employee employee) {
if (employee != null) {
try {
em.merge(employee);
em.flush();
} catch (RuntimeException ex) {
em.clear();
throw ex;
}
}
}
似乎相當標準給我。我檢查了產生疑問,當我創建/更新的技術,我得到這樣的一個員工:
INSERT INTO EMPLOYEES_TECHNOLOGIES (TEC_ID, EMP_USERNAME) VALUES (?, ?)
bind => [99, TEST]
但是當我刪除員工的技術和融合,我得到無論是這個錯誤的查詢:
DELETE FROM EMPLOYEES_TECHNOLOGIES WHERE ((TEC_ID = ?) AND (EMP_USERNAME = ?))
bind => [99, null]
或者,我得到一個異常:
Exception Description: The attribute [id] of class [be.brail.entities.Employee] is mapped to a primary key column in the database. Updates are not allowed.
這讓我覺得,員工是越來越創建,因爲我沒有改變ID ,因此引發異常是因爲具有該特定ID的員工已經存在。至少,這是我的想法。
爲什麼DELETE查詢中的username參數爲空,我不知道。但我想:)
在此先感謝。
猜測這不是一個簡單的問題 – mokuril