簡體   English   中英

將空值保存到多對一休眠關系錯誤

[英]Save null value to many-to-one hibernate relationship error

我有兩個班級- PersonDepartment PersonDepartment之間存在多對一的關系。

public class Person {
  private Integer id;
  private String name;
  private Department department;

  @ManyToOne(fetch=FetchType.EAGER, optional=true, targetEntity=Department.class)
  @NotFound(action=NotFoundAction.IGNORE)
  @JoinColumn(name="department", referencedColumnName="id", nullable=true, insertable=false, updatable=true)
  public Department getDepartment() {
    return department;
  }

  public void setDepartment(Department department) {
    this.department = department;
  }
  // other getter and setter
}

public class Department {
  private Integer id;
  private String name;
  // other getter and setter
}

該程序通過調用以下命令保存Person對象:

  getHibernateTemplate().saveOrUpdate(person);

如果在保存之前設置了Person對象的部門值,則程序可以正常工作。 保存之前,當Person對象的部門值為null時,出現以下錯誤:

對象引用了一個未保存的瞬態實例-在刷新之前保存該瞬態實例:webmodule.model.Department; 嵌套的異常是org.hibernate.TransientObjectException:對象引用了一個未保存的瞬態實例-在刷新之前保存該瞬態實例:webmodule.model.Department

多對一關系是否缺少任何設置? 請指教,謝謝。

我已經定義了Struts2 + Spring + Hibernate,並且通過調用來保存人員實例

getHibernateTemplate().saveOrUpdate(person);

我已經嘗試添加

@org.hibernate.annotations.Cascade
   ({org.hibernate.annotations.CascadeType.SAVE_UPDATE,   
          org.hibernate.annotations.CascadeType.DELETE_ORPHAN}) 

但這會在將null保存為多對一關系時自動在Department中創建一個附加記錄!

例如,我在Department中有3條記錄MIS,PURCHASING和ADMIN,並且該人員實例最初是將部門保存為MIS的。 當我嘗試保存部門設置為null的人員實例時。 部門中有4條記錄MIS,PURCHASING,ADMIN和MIS,人員實例保存為Department設置為新的MIS記錄,不能為空! 您是否有任何簡單的多對一關系樣本,其中的null值保存到關系列中? 非常感謝。

您所顯示的內容不足以給出明確的答案。 嘗試創建一個SSCCE

使用已顯示的代碼(除了缺少一些重要的注釋,我認為您在發布時只是將其省略了),如果這樣做,則會得到該異常:

Session session = ...
Transaction tx = session.beginTransaction();
Person person = new Person();
person.setDepartment(new Department());
session.save(person);
tx.commit();

由於您沒有在“人員->部門”關系上定義級聯 ,因此必須明確保存“人員”和“部門”才能起作用。 沒有Department的保存,它是瞬時的,並且不可能僅使對象圖的一部分持久化。

可能是您缺少@Cascade({CascadeType.SAVE_UPDATE})嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM