Java JPA继承映射-使字段在1个子类中是可选的,在另一个子类中是必需的
我在为之工作的应用程序中有一个实体,它有两个版本 我已经使用JPA继承映射映射了实体,所以现在有两个类,我们称它们为Contract和OtherContract。它们都有一对共享字段,在BaseContract中定义。这两个类都继承自该基类 现在的问题是,在这些共享字段中,有些字段在“Contract”类中应该是强制性的(如在数据库中有NOTNULL约束),但在“OtherContract”中应该是可选的 我可以做的是复制两个类中共享类的所有字段,并相应地修改注释,但这似乎很难管理 (像这样:) 我还可以将所有字段设置为非强制性,并在我的域层中添加验证(无论如何我都会这样做)。我更喜欢这个,但是数据库表将有我不喜欢的所有可选字段 我可能必须使用的继承类型是TABLE_PER_类Java JPA继承映射-使字段在1个子类中是可选的,在另一个子类中是必需的,java,hibernate,jpa,inheritance,Java,Hibernate,Jpa,Inheritance,我在为之工作的应用程序中有一个实体,它有两个版本 我已经使用JPA继承映射映射了实体,所以现在有两个类,我们称它们为Contract和OtherContract。它们都有一对共享字段,在BaseContract中定义。这两个类都继承自该基类 现在的问题是,在这些共享字段中,有些字段在“Contract”类中应该是强制性的(如在数据库中有NOTNULL约束),但在“OtherContract”中应该是可选的 我可以做的是复制两个类中共享类的所有字段,并相应地修改注释,但这似乎很难管理 (像这样:)
有人知道没有这些缺点的解决方案吗?您的继承策略是什么?强制是什么意思?我已经更新了我的问题,谢谢。您可以在父类中定义字段,并在类级别使用
@AttributeOverride
重新定义子类中的列。您的继承策略是什么?“强制”是什么意思?我已经更新了我的问题,谢谢。您可以在父类中定义字段,并在类级别使用@AttributeOverride
重新定义子类中的列。
public class Contract extends BaseContract {
@Column(nullable = true)
private String name;
}
public class OtherContract extends BaseContract {
@Column(nullable = false)
private String name;
}