gpt4 book ai didi

java - org.hibernate.TransientObjectException 如果任何多对一字段为空(或未在表单中选择)

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:13 25 4
gpt4 key购买 nike

我正在将 jpa 与 play 框架一起使用。我有一个实体 JobseekerDetails

@Entity
public class JobseekerDetails {

@Id
@Column(name = "jobseekerDetails_id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long jobseekerDetails_id;

@ManyToOne
@JoinColumn(name = "basicEducation_id")
private JobseekerFormBasicEducation basicEducation;

@ManyToOne
@JoinColumn(name = "masterEducation_id")
private JobseekerFormMasterEducation masterEducation;

@ManyToOne
@JoinColumn(name = "doctrateEducation_id")
private JobseekerFormDoctrateEducation doctrateEducation;

@ElementCollection
private List<String> certificateName =new ArrayList<String>();

@Column(length = 3000)
private String resume;

private Long experience;

private String skills;

private String resumePath;

@ManyToOne
@JoinColumn(name = "industry_id")
private JobseekerFormIndustry industry;

@ManyToOne
@JoinColumn(name = "functionalArea_id")
private JobseekerFormFunctionalArea functionalArea;

}

JobseekerFormFunctionalAreaJobseekerFormIndustry 等其他实体具有多对一关系。这些实体具有已保存在数据库中的固定值。

保存 JobseekerDetails 时,应将其所有详细信息与相应的多对一关系 ID 一起保存,但不要保存到实体 JobseekerFormFunctionalArea 和 JobseekerFormIndustry,因为它们是预定义的

我的问题是,当我(通过我的表单)保存 JobseekerDetails 中的所有 manytoone 关系字段 ID 时,它被正确保存但是当提交我的表单时没有在任何 manytoone 关系字段中选择任何值例如,如果我没有在我的fuctionalArea_id 字段给出以下异常

org.hibernate.TransientObjectException:object references an unsaved transient instance - save the transient instance before flushing

如果我选择所有字段,详细信息将被保存,但如果我选择任何在我的模型中映射了 manytoone 的字段,那么它会给出上述异常

但是 jpa 自动设置 nullable=true 那么为什么会这样

我搜索了一下,发现这个问题可以通过添加 cascade 来解决。我添加了 cacade type Merge 但得到了上述相同的异常。

我也试过设置 nullable=true 但得到同样的错误

在设置 cascade = CascadeType.ALLcascade = CascadeType.PERSIST 时,我遇到异常

PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist:

任何帮助将不胜感激

最佳答案

当您没有在表单中选择任何“basicEducation”并且您正在保存表单时,那里会出现一个 ID 为空的新对象。所以你有:

jobseekerDetails.basicEducation = new JobseekerFormBasicEducation ()

这会导致 TransientObjectException

为了避免它,你必须设置

jobseekerDetails.basicEducation=null 

保存之前。

关于java - org.hibernate.TransientObjectException 如果任何多对一字段为空(或未在表单中选择),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27484985/

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