简体   繁体   English

Hibernate UNIQUE INDEX 的注解映射(约束)

[英]Hibernate Annotation mapping for UNIQUE INDEX (Constraint)

CREATE TABLE image_info
(
    id BIGSERIAL PRIMARY KEY,
    is_main boolean,
    image_id BIGINT REFERENCES image(id) NOT NULL,
    good_id BIGINT REFERENCES good(id) NOT NULL
);

I need to add a constraint that only unique good_id must have one is_main = true, but many is_main = false for example:我需要添加一个约束,即只有唯一的 good_id 必须有一个 is_main = true,但许多 is_main = false 例如:

INSERT INTO image_info (is_main, good_id, image_id) VALUES (true, 2,1);
INSERT INTO image_info (is_main, good_id, image_id) VALUES (false, 2,2);
INSERT INTO image_info (is_main, good_id, image_id) VALUES (false, 3,1);
INSERT INTO image_info (is_main, good_id, image_id) VALUES (true, 3,2);
INSERT INTO image_info (is_main, good_id, image_id) VALUES (false, 3,3);
INSERT INTO image_info (is_main, good_id, image_id) VALUES (true, 3,4); // - error because of constraint

I can add this constraint via SQL script:我可以通过 SQL 脚本添加这个约束:

CREATE UNIQUE INDEX "only_one_good_with_is_main_true_uix" ON image_info(good_id) WHERE is_main = true;

My question is how can I add the same constraint with hibernate mapping?我的问题是如何使用 hibernate 映射添加相同的约束?

You can't do that with plain Hibernate annotations.你不能用普通的 Hibernate 注释来做到这一点。 You should use a schema management tool like Liquibase or Flyway anyway, as Hibernate is not meant to be used for schema migration or these database specific things.无论如何,您都应该使用像LiquibaseFlyway这样的模式管理工具,因为 Hibernate 并不意味着用于模式迁移或这些数据库特定的东西。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM