Hibernate Check Annotation

10,934

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.

Share:
10,934
blahblah
Author by

blahblah

Updated on July 20, 2022

Comments

  • blahblah
    blahblah almost 2 years

    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?

  • blahblah
    blahblah over 8 years
    Suppose i have: //////////// @Column(name = "sample") private Long a; ////////// Which one should I use in check constraint? 'a' or 'sample'? I guess the question is: Is there HQL or SQL used?
  • Stefan Falk
    Stefan Falk about 6 years
    Apparently @Check can only be used once, at class level. How can we add multiple constraints?
  • BrendanM
    BrendanM over 2 years
    Any idea if this is possible, I have multiple named check constraints but no way to add them
  • Admin
    Admin over 2 years
    As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.