根據here只要我使用org.hibernate.Session
,而不是JPA
,應該允許它使用session.remove(entity)
休眠脫離實體錯誤而刪除的實體
但是每當我試圖刪除實體刪除也是分離的實體,它不允許我因分離狀態而將其刪除。
這條線是這樣的;
employeeDao.delete(employee)
即使我嘗試刪除這樣
employeeDao.delete(employeeDao.findById(employee.getId)):
它給出了同樣的錯誤,並且不會將其刪除。
例外的是
意外的RuntimeException 最後原因:刪除脫管的實例rd.core.model.Employee#69
堆棧跟蹤爲
根原因:
java.lang.IllegalArgumentException:卸下分離的情況下 rd.core.model.Employee#69 在org.hibernate.jpa.event.internal.core.JpaDeleteEventListener.performDetachedEntityDeletionCheck(JpaDeleteEventListener.java:69) 在org.hibernate.event.internal.DefaultDeleteEventListener。 onDelete(DefaultDeleteEventListener.java:106) 在org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:73) 在org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:920) 在有機hibernate.internal.SessionImpl.delete(SessionImpl.java:896) 在rd.core.persistence.AbstractHibernateDao.delete(AbstractHibernateDao.java:35) 在rd.core.services.EmployeeManagerImpl.deleteEmployee(EmployeeManagerImpl.java:186) at c om.google.inject.persist.jpa.JpaLocalTxnInterceptor.invoke(JpaLocalTxnInterceptor.java:66) 在java.lang.reflect.Method.invoke(Method.java:606)
我想我搞亂完全錯誤的東西。即使這會導致相同的例外。
public void remove(Employee employee) {
getCurrentSession().merge(employee);
getCurrentSession().delete(employee);
}
這裏是我的POJO
@Entity
@Table(name = "TMP_EMPLOYEE")
public class Employee implements Identifiable<Integer> {
private static final String ID_GENERATOR_NAME = "TMP_EMPLOYEE_ID_SEQ";
public static final String PROP_FULL_NAME = "fullName";
public static final String PROP_ID = "id";
public static final String PROP_DEP = "department";
public static final String COLUMN_FULL_NAME = "FULL_NAME";
public static final String COLUMN_ID = "emp.ID";
public static final String COLUMN_DEP = "NAME";
@Column(name = "ID", nullable = false)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = ID_GENERATOR_NAME)
@SequenceGenerator(name = ID_GENERATOR_NAME, sequenceName = "S_EMPLOYEE_ID", allocationSize = 1)
private Integer id;
@Column(name = "FULL_NAME", nullable = false, length = 60)
@Basic
private String fullName;
@ManyToOne
@JoinColumn(name = "DEP_ID", referencedColumnName ="ID", nullable = false)
@Fetch(FetchMode.SELECT)
private Department department;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public Integer getDepartmentId() {
return 0;
}
public void setDepartmentId(Integer departmentId) {
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof Employee))
return false;
Employee that = (Employee) o;
if (getId() != null ? !getId().equals(that.getId()) : that.getId() != null)
return false;
return true;
}
@Override
public int hashCode() {
return getId() != null ? getId().hashCode() : 0;
}
@Override
public Integer getIdentity() {
return id;
}
@Override
public String toString(){
return "Id: " + this.id + " Employee Name: " + this.fullName;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
這聽起來可能很簡單,但什麼原因導致究竟改變實體狀態這樣,爲什麼我不能刪除它,即使它被分離?
注意:我正在通過類委託相同的員工實例。所以它總是同一個實體。
如果您需要更多數據,請諮詢。實際上我不知道哪些數據可以幫助我們弄清楚這一點。
什麼是錯誤? – ProgrammerBoy
如果hibernate告訴你你的實體已經分離,只需在刪除它之前重新附加它。 – Zorglube
顯示你的pojo請 –