2011-05-24 31 views
2

我有一个数据模型,其中一些实体从单个超类实体继承一些常见属性。我在超类上使用了InheritanceType.JOINED,这导致Hibernate为超类中定义的属性创建一个表,其子类表只包含由子类添加的列(因此为子类实例加载属性,执行联接在两张桌子之间)。这一切工作正常。Hibernate:跨多个表的@UniqueConstraint?

然而,我想要做的是指定一个唯一约束,它包含子类和超类表中的字段。例如,说我的父实体是一样的东西:

Thing: {id, name} 

...然后我有一些子类的东西,例如:

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

...我想配置Hibernate自动实施给定的Company不能有两个Employee同名。 company字段位于Employee表中,但name字段位于Thing表中,那么是否有任何方法可以让Hibernate执行此约束,或者是否需要以编程方式添加新的Employee

回答

5

如果在数据库中不可能,那么Hibernate将无法实现。你不能用SQL在多个表上创建一个约束,所以在Hibernate中也是如此。

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

2

你可以不是使用InheritanceType.JOINED,那么所有事情都会在一张巨大的桌子上结束,你可以写出你的约束。如前所述:你想要的只是在关系数据库中不可能的。