gpt4 book ai didi

java - 将空值保存到多对一 hibernate 关系错误

转载 作者:行者123 更新时间:2023-12-02 00:36:24 24 4
gpt4 key购买 nike

我有两个类 - PersonDepartmentPersonDepartment 之间存在多对一关系。

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 时,出现以下错误:

object references an unsaved transient instance - save the transient instance before flushing: webmodule.model.Department; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: webmodule.model.Department

多对一关系是否遗漏了任何设置?请指教,谢谢。

我已经定义了Struts2 + Spring + Hibernate,并且通过调用保存了person实例

getHibernateTemplate().saveOrUpdate(person);

我已经尝试添加

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

但是当将 null 保存到多对一关系时,这会自动在 Department 中创建一条附加记录!

例如,我在部门中有3条记录MIS、PURCHASING和ADMIN,而人员实例最初保存为MIS。当我尝试保存部门设置为空的人员实例时。部门中有 4 条记录 MIS、PURCHASING、ADMIN 和 MIS,人员实例与部门设置一起保存为新的 MIS 记录,不为空!您是否有任何简单的多对一关系示例,其中 null 值保存到关系列?非常感谢。

最佳答案

您所展示的内容不足以给出明确的答案。尝试创建一个 SSCCE .

使用您所展示的代码 - 除了它缺少一些重要的注释(我假设您在发布时只是省略了这些注释) - 如果您这样做,您会得到该异常:

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

既然你有no cascading defined对于“人员 -> 部门”关系,您必须显式保存“人员”和“部门”才能使其正常工作。如果没有 Department 的保存,它是暂时的,并且不可能仅使对象图的一部分持久化。

关于java - 将空值保存到多对一 hibernate 关系错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com