Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA继承映射-使字段在1个子类中是可选的,在另一个子类中是必需的_Java_Hibernate_Jpa_Inheritance - Fatal编程技术网

Java JPA继承映射-使字段在1个子类中是可选的,在另一个子类中是必需的

Java JPA继承映射-使字段在1个子类中是可选的,在另一个子类中是必需的,java,hibernate,jpa,inheritance,Java,Hibernate,Jpa,Inheritance,我在为之工作的应用程序中有一个实体,它有两个版本 我已经使用JPA继承映射映射了实体,所以现在有两个类,我们称它们为Contract和OtherContract。它们都有一对共享字段,在BaseContract中定义。这两个类都继承自该基类 现在的问题是,在这些共享字段中,有些字段在“Contract”类中应该是强制性的(如在数据库中有NOTNULL约束),但在“OtherContract”中应该是可选的 我可以做的是复制两个类中共享类的所有字段,并相应地修改注释,但这似乎很难管理 (像这样:)

我在为之工作的应用程序中有一个实体,它有两个版本

我已经使用JPA继承映射映射了实体,所以现在有两个类,我们称它们为Contract和OtherContract。它们都有一对共享字段,在BaseContract中定义。这两个类都继承自该基类

现在的问题是,在这些共享字段中,有些字段在“Contract”类中应该是强制性的(如在数据库中有NOTNULL约束),但在“OtherContract”中应该是可选的

我可以做的是复制两个类中共享类的所有字段,并相应地修改注释,但这似乎很难管理

(像这样:)

我还可以将所有字段设置为非强制性,并在我的域层中添加验证(无论如何我都会这样做)。我更喜欢这个,但是数据库表将有我不喜欢的所有可选字段

我可能必须使用的继承类型是TABLE_PER_类


有人知道没有这些缺点的解决方案吗?

您的继承策略是什么?强制是什么意思?我已经更新了我的问题,谢谢。您可以在父类中定义字段,并在类级别使用
@AttributeOverride
重新定义子类中的列。您的继承策略是什么?“强制”是什么意思?我已经更新了我的问题,谢谢。您可以在父类中定义字段,并在类级别使用
@AttributeOverride
重新定义子类中的列。
public class Contract extends BaseContract {
    @Column(nullable = true)
    private String name;
}

public class OtherContract extends BaseContract {
    @Column(nullable = false)
    private String name;
}