I have a table with three fields, say a, b, c. I would like to add a constraint ensuring that if a is not null, then also b and c are not null. I have done that using following SQL
ALTER TABLE sample ADD CONSTRAINT no_nulls CHECK (CASE WHEN a IS NOT NULL THEN b IS NOT NULL AND c IS NOT NULL END)
Is there a way to achieve same effect using hibernate annotation @Check?
I can’t find a helpful example with that annotation, do developers tend not to use it at all?
Advertisement
Answer
Yes it is possible if @Check
is used at class level like this:
@Entity @Check(constraints = "COL_A IS NULL OR (COL_B IS NOT NULL and COL_C IS NOT NULL)") public class Sample { @Column(name = "COL_A") private Long a; @Column(name = "COL_B") private Long b; @Column(name = "COL_C") private Long c; }
(Note that I rewrote your condition using @jarlh comment.). The constraints
clause of @Check
annotation needs to refer to the name
attribute of @Column
(it must be pure SQL).
@Check
annotation needs to be at class level because of a Hibernate bug.