Hibernate:@UniqueConstraint跨多个表?

时间:2011-05-24 07:17:29

标签: java hibernate inheritance unique-constraint

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

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

Thing: {id, name}

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

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

...我希望将Hibernate配置为自动强制给定的Company不能有两个具有相同名称的Employeecompany字段位于Employee表中,但name字段位于Thing表中,因此有没有办法让Hibernate强制执行此约束,或者每当我添加新的Employee时,我都需要以编程方式执行此操作?

2 个答案:

答案 0 :(得分:5)

如果在数据库中无法实现,则无法使用Hibernate。你不能用SQL在多个表上创建一个约束,所以在Hibernate中都不能。

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

答案 1 :(得分:2)

你可以使用InheritanceType.JOINED,然后一切都以一张巨大的表格结束,你可以编写你的约束。如前所述:你想要的只是在关系数据库中是不可能的。