我有一个数据模型,其中多个实体从单个超类实体继承了一些公共属性。我在超类上使用InheritanceType.JOINED,这会导致Hibernate为超类中定义的属性创建一个表,其中的子类表只包含由子类添加的列(因此,要加载子类实例的属性,需要在两个表之间执行连接)。这一切都运行得很好。
然而,我想要做的是指定一个唯一的约束,它包括子类表和超类表中的字段。例如,假设我的超类实体是这样的:
Thing: {id, name}...and,然后我有一些子类实体,比如:
Company: {address} //inherits 'id' and 'name' from 'Thing'
Employee: {company} //inherits 'id' and 'name' from 'Thing'...and我想配置Hibernate自动强制一个给定的Company不能有两个同名的Employee。company字段在Employee表中,但name字段在Thing表中,所以有没有办法让Hibernate强制执行这个约束,或者我需要在每次添加新的Employee时以编程方式执行此约束
发布于 2011-05-24 17:13:52
如果这在数据库中是不可能的,在Hibernate中也是不可能的。您不能使用SQL在多个表上创建一个约束,因此在Hibernate中也不能。
您可以通过创建一个仅包含公司和雇员id的新实体并在这两个字段上设置唯一约束来解决此问题,但我建议通过编程方式强制执行此操作。
发布于 2011-05-24 17:29:59
你不能使用InheritanceType.JOINED,然后所有的东西都会被放到一个很大的表中,你可以写你的约束。正如前面所说的:您想要的东西在关系数据库中是不可能实现的。
https://stackoverflow.com/questions/6106995
复制相似问题