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
,然后所有内容都会出现在一个大表中,您可以编写约束。正如前面所说:在关系数据库中,您想要的是不可能的