JPA OneToOne关系自动创建

时间:2016-07-03 10:25:14

标签: java spring jpa spring-boot one-to-one

我担心以前可能会问过这个问题,但我要么找不到或不理解类似问题的答案。

我有一张这样的表格

@Entity
public class Offerte extends BaseEntity{

    @OneToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="dossier")
    @GeneratedValue(strategy = GenerationType.AUTO)
    @NotNull
    private Dossier dossier;

这与表格档案有一个OneToOne连接,并且在创建了一个非常复杂的情况后,我希望它自动成为一个档案。

@Entity
public class Dossier extends BaseEntity{

    @OneToOne(fetch=FetchType.LAZY, mappedBy="dossier")
    @NotNull
    private Offerte offerte;

我已尝试使用generationtype auto执行此操作,但我一直坚持违规行为

List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='may not be null', 

是否可以使此关系自动生效?

修改

river提出的java解决方案

@Entity
public class Offerte extends BaseEntity{
    @OneToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name="dossier")
    @NotNull
    private Dossier dossier = new Dossier();

给出以下错误

javax.validation.ConstraintViolationException: Validation failed for classes [be.ugent.lca.data.entities.Dossier] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='may not be null', propertyPath=offerte, rootBeanClass=class be.ugent.lca.data.entities.Dossier, messageTemplate='{javax.validation.constraints.NotNull.message}'}
]

1 个答案:

答案 0 :(得分:0)

为了在创建新的Dossier对象时创建offerte - 您应该只需要下载到java解决方案:

public class Dosier {
    @OneToOne(cascade = CascadeType.ALL)
    @NotNull
    private Offerte offerte = new Offerte(....);
}

这将产生以下后果:

  • 每当创建新的Dosier对象(通过调用构造函数)时,将使用新的Offerte对象填充offerte变量作为构造的一部分。
  • 当您保存创建的Dosier时,它将保存offerte对象(这是级联选项的用途)
  • 当您加载创建的档案时 - JPA将加载offerte对象并正确初始化档案