gpt4 book ai didi

java - JPA 的@UniqueConstraint 注释似乎不能保证唯一性

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

我有这个代码:

@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"name", "color"}))
@MappedSuperclass
public abstract class AbstractInstance extends Model {

@NotNull
public String name;

public String color;

...
}

但由于某种原因,@UniqueConstraint 没有效果 - 我成功地在数据库中放入了多个具有完全相同名称和颜色的实例(当我查询 color='green' AND name='MyName' 我得到多个结果)。难道我做错了什么?我是否应该执行其他操作以使该复合唯一性约束生效?

问题的另一个证据可能是,当我查询数据库的 INFORMATION_SCHEMA.CONSTRAINTS 关于我的相关表时,我得到的结果似乎没有提到“名称”和“颜色”是唯一的:

CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME    | CONSTRAINT_TYPE | UNIQUE_INDEX_NAME | CHECK_EXPRESSION | COLUMN_LIST  | SQL  
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
play | public | fkcb0e606fe2f3066d | REFERENTIAL | PRIMARY_KEY_8 | null | CONTAINER_ID | ALTER TABLE PUBLIC.UNLABELEDINSTANCE ADD
| | | | | | | CONSTRAINT PUBLIC.FKCB0E606FE2F3066D FOREIGN
| | | | | | | KEY(CONTAINER_ID) INDEX
| | | | | | | PUBLIC.FKCB0E606FE2F3066D_INDEX_C REFERENCES
| | | | | | | PUBLIC.DATASET(ID) NOCHECK
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
play | public | constraint_d7 | PRIMARY KEY | PRIMARY_KEY_C | null | ID | ALTER TABLE PUBLIC.UNLABELEDINSTANCE ADD
| | | | | | | CONSTRAINT PUBLIC.CONSTRAINT_D7 PRIMARY KEY(ID)
| | | | | | | INDEX PUBLIC.PRIMARY_KEY_C

我正在使用:

  • Java 1.7
  • Hibernate 通过 Maven 依赖项:org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final(我不确定如何从中推断出 JPA\Hibernate 的版本)
  • 播放框架 1.2.7
  • H2 数据库(Play Framework 自带的,用于内存数据库)

最佳答案

指定@UniqueConstraint 的唯一效果是,如果您使用 JPA 提供程序的模式生成功能,将向数据库模式添加唯一约束。如果不是,那么它绝对没有效果。

显而易见的推论是,如果您想在访问数据库之前捕获唯一约束违规,您需要在代码中添加验证。

你必须在某处有一个 persistence.xml。

https://www.playframework.com/documentation/2.1.0/JavaJPA

如上所述,您需要添加以下属性

Hibernate hbm2ddl.auto possible values and what they do?

关于java - JPA 的@UniqueConstraint 注释似乎不能保证唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26497676/

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