Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 Hibernate:@UniqueConstraint跨多个表?_Java_Hibernate_Inheritance_Unique Constraint - Fatal编程技术网

Java Hibernate:@UniqueConstraint跨多个表?

Java Hibernate:@UniqueConstraint跨多个表?,java,hibernate,inheritance,unique-constraint,Java,Hibernate,Inheritance,Unique Constraint,我有一个数据模型,其中许多实体从单个超类实体继承一些公共属性。我在超类上使用了InheritanceType.JOINED,这会导致Hibernate为超类中定义的属性创建一个表,子类表只包含子类添加的列(为了加载子类实例的属性,在两个表之间执行联接)。这一切都很好 但是,我想做的是指定一个唯一的约束,该约束包括子类和超类表中的字段。例如,假设我的超类实体类似于: Thing: {id, name} …然后我有一些子类实体,如: Company: {address} //inherits '

我有一个数据模型,其中许多实体从单个超类实体继承一些公共属性。我在超类上使用了
InheritanceType.JOINED
,这会导致Hibernate为超类中定义的属性创建一个表,子类表只包含子类添加的列(为了加载子类实例的属性,在两个表之间执行联接)。这一切都很好

但是,我想做的是指定一个唯一的约束,该约束包括子类和超类表中的字段。例如,假设我的超类实体类似于:

Thing: {id, name}
…然后我有一些子类实体,如:

Company: {address}  //inherits 'id' and 'name' from 'Thing'
Employee: {company} //inherits 'id' and 'name' from 'Thing'

…我想将Hibernate配置为自动强制一个给定的
公司
不能有两个同名的
员工
company
字段在
Employee
表中,而
name
字段在
Thing
表中,那么有没有办法让Hibernate强制执行此约束,或者在添加新的
Employee
时是否需要以编程方式执行此约束

如果在数据库中不可能,那么在Hibernate中就不可能。不能使用SQL在多个表上创建一个约束,因此在Hibernate中也不能

您可以通过创建一个仅包含公司和员工id的新实体并在这两个字段上设置唯一约束来解决此问题,但我建议您以编程方式强制执行此约束。

您不能使用
InheritanceType.JOINED
,然后所有内容都会出现在一个大表中,您可以编写约束。正如前面所说:在关系数据库中,您想要的是不可能的