我正在关注 Entity-Snipped
@Entity
public class EntityWithNaturalId extends BaseEntity {
@NaturalId public String name;
private EntityWithNaturalId() {}
public EntityWithNaturalId(String name) { this.name = name; }
}
如果我尝试将同名实体保存两次,则会出现以下错误(如预期的那样):
org.hibernate.exception.ConstraintViolationException: could not execute statement
Eindeutiger Index oder Primärschlüssel verletzt:
"_UNIQUEKEY_INDEX_6 ON PUBLIC.ENTITYWITHNATURALID(NAME) VALUES ('AA', 1)"
Unique index or primary key violation:
"_UNIQUEKEY_INDEX_6 ON PUBLIC.ENTITYWITHNATURALID(NAME) VALUES ('AA', 1)"
令我吃惊的是,如果我查看数据库中的表约束,我什么也看不到。不应该有一个唯一的约束吗?
Postgres 9.3.2 休眠 4.2.0
编辑:之前的这篇文章具有误导性,因为我减少了事实以简化情况。通过这样做,我使这篇文章不一致!
@Vlad 是对的,但我意识到问题出在其他地方。
我想写的是还有其他几个使用@NaturalId 的实体。Hibernate 尝试创建名称为 _UNIQUEKEY 的所有约束。(缺少前缀)
只有第一个是真正创建的。所有其他的都抛出这个异常:
2014-11-10 13:18:10 ERROR org.hibernate.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: alter table AnotherEntityWithNaturalId add constraint _UniqueKey unique (pid)
2014-11-10 13:18:10 ERROR org.hibernate.tool.hbm2ddl.SchemaExport - ERROR: relation "_uniquekey" already exists
在我看来,唯一键名没有正确构建,可能是一个错误?