gpt4 book ai didi

java - 为什么@NaturalId 不在数据库中创建唯一约束?

转载 作者:行者123 更新时间:2023-11-29 13:58:21 25 4
gpt4 key购买 nike

我正在关注 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 hibernate 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

在我看来,唯一键名称构建不正确,可能是一个错误?

最佳答案

索引在那里:

 ON PUBLIC.ENTITYWITHNATURALID(NAME)

异常明确指定约束违反异常。

在 PgAdmin 中,您应该在 Schemas - public - Tables - ENTITYWITHNATURALID - Constraints - _UNIQUEKEY_INDEX_6 下看到它

如果您没有看到它,请尝试运行此 SQL 命令:

ALTER TABLE ENTITYWITHNATURALID ADD CONSTRAINT _UNIQUEKEY_INDEX_6 UNIQUE (name);

你应该得到:

ERROR: relation "_UNIQUEKEY_INDEX_6" already exists
SQL state: 42P07

如果约束已经存在。

关于java - 为什么@NaturalId 不在数据库中创建唯一约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26840911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com