我有一个与javax.validation.constraints.NotNull注释相关的问题.
在我的项目中,我确实有类如下的类树:
@Inheritance(strategy = InheritanceType.JOINED)
class Ssss {
@ManyToOne
private Xxxx x;
public Xxxx getXxxx() {
return x;
}
}
@Inheritance(strategy = InheritanceType.JOINED)
class Yyyy extends Ssss {
@Override
//some not important annotations
public Xxxx getXxxx() {
return super.getXxxx();
}
}
@Inheritance(strategy = InheritanceType.JOINED)
class Zzzz extends Ssss {
@Override
//some not important annotations
@NotNull
public Xxxx getXxxx() {
return super.getXxxx();
}
}
这三个类作为三个表存储在数据库中.
对于模式创建我正在使用Hibernate:
hibernate.hbm2ddl.auto=create
Hibernate在为超类sss生成的表中存储的xxxx_object_id字段中添加NOT NULL是否是预期的行为,如下所示:??
我找不到有关hibernate如何在继承的getter上处理@NotNull的任何相关信息.
任何人都可以帮我解决这个问题吗?
最好的祝福.
米哈尔
解决方法:
是. Hibernate有一些约束,它会在发生冲突时继续检查.
这是一个例子:
@Inheritance(strategy = InheritanceType.JOINED)
class Ssss {
@ManyToOne
private Xxxx x;
public Xxxx getXxxx() {
return x;
}
}
如果它是这么多,那么hibernate没有冲突,因为它使xxxx类型的x为null
@Inheritance(strategy = InheritanceType.JOINED)
class Zzzz extends Ssss {
@Override
//some not important annotations
@NotNull
public Xxxx getXxxx() {
return super.getXxxx();
}
}
这里Hibernate通过@NotNull注释被告知将Xxxx的x类型设为@NotNull
在上面两种情况下,存在冲突,对于Sss,它可以是Null,而Zzzz则不能为空.为了推断并解决冲突,Hibernate也将Ssss的Xxxx类型变量设置为NotNull.