微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐