gpt4 book ai didi

java - 子类getter上的@NotNull影响父类表

转载 作者:搜寻专家 更新时间:2023-10-31 20:32:26 25 4
gpt4 key购买 nike

我有一个与 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 在存储在为父类(super class) ssss 生成的表中的 xxxx_object_id 字段上添加 NOT NULL 是否是预期的行为,如下所示:??

Postgres

我找不到任何关于 hibernate 如何处理继承的 getter 上的 @NotNull 的相关信息。

谁能帮我解决这个问题?
最好的问候。
迈克尔

最佳答案

是的。 Hibernate 有一些约束,它会在发生冲突时不断检查这些约束。
这是一个例子:

@Inheritance(strategy = InheritanceType.JOINED)
class Ssss {

@ManyToOne
private Xxxx x;
public Xxxx getXxxx() {
return x;
}
}

如果是这么多,那么 hibernate 就没有 Conflict,因为它将 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 注解被告知将 Xxxxx 类型设为 @NotNull < br/>以上两种情况有冲突,Ssss可以为Null,Zzzz不能为null。为了推断并解决冲突,Hibernate 也将 Ssss 的 Xxxx 类型变量设为 NotNull。

关于java - 子类getter上的@NotNull影响父类表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42085164/

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