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

我有一个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是否是预期的行为,如下所示:??

Postgres

我找不到有关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.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...