Hibernate:@UniqueConstraint跨多个表?

aro*_*oth 2 java inheritance hibernate unique-constraint

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

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

Thing: {id, name}
Run Code Online (Sandbox Code Playgroud)

...然后我有一些子类实体,如:

Company: {address}  //inherits 'id' and 'name' from 'Thing'
Employee: {company} //inherits 'id' and 'name' from 'Thing'
Run Code Online (Sandbox Code Playgroud)

...并且我想配置Hibernate以自动强制给定Company不能具有Employee相同名称的两个.该company字段在Employee表中,但该name字段在Thing表中,所以有没有办法让Hibernate强制执行此约束,或者我是否需要在添加新的时以编程方式执行此操作Employee

Sti*_*ens 5

如果在数据库中无法实现,那么Hibernate将无法实现.您不能使用SQL在多个表上创建一个约束,因此在Hibernate中也不能.

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