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 :
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:
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?