JPA OneToOne 关系自动创建
JPA OneToOne relation automatic creation
我担心之前可能有人问过这个问题,但我没有找到或不理解类似问题的答案。
我有这个table要约
@Entity
public class Offerte extends BaseEntity{
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="dossier")
@GeneratedValue(strategy = GenerationType.AUTO)
@NotNull
private Dossier dossier;
与 table 档案有 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}'}
]
为了在您创建新的 Dossier 对象时创建报价 - 您应该直接下拉至 java 解决方案:
public class Dosier {
@OneToOne(cascade = CascadeType.ALL)
@NotNull
private Offerte offerte = new Offerte(....);
}
这将产生以下后果:
- 每当创建新的 Dosier 对象(通过调用构造函数)时,offerte 变量将作为新 Offerte 对象构造的一部分填充。
- 当您保存这样创建的 Dosier 时,它会保存 offerte 对象(这就是 cascade 选项的用途)
- 当您加载创建的档案时 - JPA 将加载要约对象并正确初始化档案
我担心之前可能有人问过这个问题,但我没有找到或不理解类似问题的答案。
我有这个table要约
@Entity
public class Offerte extends BaseEntity{
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="dossier")
@GeneratedValue(strategy = GenerationType.AUTO)
@NotNull
private Dossier dossier;
与 table 档案有 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}'}
]
为了在您创建新的 Dossier 对象时创建报价 - 您应该直接下拉至 java 解决方案:
public class Dosier {
@OneToOne(cascade = CascadeType.ALL)
@NotNull
private Offerte offerte = new Offerte(....);
}
这将产生以下后果:
- 每当创建新的 Dosier 对象(通过调用构造函数)时,offerte 变量将作为新 Offerte 对象构造的一部分填充。
- 当您保存这样创建的 Dosier 时,它会保存 offerte 对象(这就是 cascade 选项的用途)
- 当您加载创建的档案时 - JPA 将加载要约对象并正确初始化档案