Hibernate 检查注解

Hibernate Check Annotation

我有一个包含三个字段的 table,比如 a、b、c。我想添加一个约束,确保如果 a 不为空,则 b 和 c 也不为空。我已经使用以下 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)

有没有办法使用hibernate注解@Check达到同样的效果?

我找不到带有该注释的有用示例,开发人员是否倾向于根本不使用它?

是的,如果在 class 级别使用 @Check 是可能的,如下所示:

@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;

}

(请注意,我使用@jarlh 评论重写了您的条件。)。 @Check注解的constraints子句需要引用@Columnname属性(必须是纯SQL)。

@Check 注释需要处于 class 级别,因为 Hibernate bug.

在 Class 级别使用下一个注释来检查所有三列,例如:

@Check(constraints = "COL_A >= 15 AND COL_B < 200 AND COL_C > 100")

是COL_A、COL_B和COL_C要检查的列名

不检查可为空的列。 @NotNull 优于@Check。