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
子句需要引用@Column
的name
属性(必须是纯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。
我有一个包含三个字段的 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
子句需要引用@Column
的name
属性(必须是纯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。