首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate:@UniqueConstraint跨多个表?

Hibernate:@UniqueConstraint跨多个表?
EN

Stack Overflow用户
提问于 2011-05-24 15:17:29
回答 2查看 2.4K关注 0票数 2

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

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

代码语言:javascript
复制
Thing: {id, name}

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

代码语言:javascript
复制
Company: {address}  //inherits 'id' and 'name' from 'Thing'
Employee: {company} //inherits 'id' and 'name' from 'Thing'

...and我想配置Hibernate自动强制一个给定的Company不能有两个同名的Employeecompany字段在Employee表中,但name字段在Thing表中,所以有没有办法让Hibernate强制执行这个约束,或者我需要在每次添加新的Employee时以编程方式执行此约束

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-24 17:13:52

如果这在数据库中是不可能的,在Hibernate中也是不可能的。您不能使用SQL在多个表上创建一个约束,因此在Hibernate中也不能。

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

票数 6
EN

Stack Overflow用户

发布于 2011-05-24 17:29:59

你不能使用InheritanceType.JOINED,然后所有的东西都会被放到一个很大的表中,你可以写你的约束。正如前面所说的:您想要的东西在关系数据库中是不可能实现的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6106995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档