Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.hibernate.TransientObjectException如果任何多对一字段为空(或未在表单中选择)_Java_Hibernate_Jpa_Orm_Playframework - Fatal编程技术网

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

Java org.hibernate.TransientObjectException如果任何多对一字段为空(或未在表单中选择),java,hibernate,jpa,orm,playframework,Java,Hibernate,Jpa,Orm,Playframework,我正在使用jpa和play框架。我有一个实体JobseekerDetails @Entity public class JobseekerDetails { @Id @Column(name = "jobseekerDetails_id", nullable = false) @GeneratedValue(strategy = GenerationType.AUTO) private Long jobseekerDetails_id; @ManyTo

我正在使用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;

}
如果我选择了所有字段,详细信息将被保存,但是如果我不能选择在我的模型中映射了多个字段的任何字段,则会出现上述异常

org.hibernate.TransientObjectException:object references an unsaved transient instance - save the transient instance before flushing
PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist:
但jpa会自动将null设置为true,那么为什么会发生这种情况

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

我还尝试设置nullable=true,但得到了相同的错误

在设置cascade=CascadeType.ALLcascade=CascadeType.PERSIST时,我得到以下异常

org.hibernate.TransientObjectException:object references an unsaved transient instance - save the transient instance before flushing
PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist:

如果您没有在表单中选择任何“基本教育”,并且您正在保存表单,则会有一个id为空的新对象。因此,您有:

jobseekerDetails.basicEducation = new JobseekerFormBasicEducation ()
这会导致TransientObject异常

要避免它,你必须设置

jobseekerDetails.basicEducation=null 

保存前。

请参见上面我的编辑,在添加cascade type all时出现异常,而且cascade type all(如我所知)将尝试将数据保存在我相应的多通映射表中,我不希望出现问题中所述的情况。如果我错了,请更正