java - Hibernate 检查注解

标签 java sql hibernate jpa check-constraints

我有一个包含三个字段的表,比如 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达到同样的效果?

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

最佳答案

是的,如果像这样在类级别使用 @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 注释需要在类级别,因为 Hibernate bug .

关于java - Hibernate 检查注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983454/

相关文章:

java - HTTP 状态 500 - 处理程序处理失败;嵌套异常是 java.lang.UnsatisfiedLinkError : The specified module could not be found

java - 在 Java 5 中获取驱动器大小

java - 根据日期范围按键过滤多图

sql - 在 SQL 中标记百分位数

sql - 通过 Perl 连接到 Teradata

java - 集合列的 Hibernate 条件查询

java - 哈希整个对象而不先转换为 byte[]

c# - 按邮政编码查找产品 |半正弦算法 |表现

java - Dropwizard/hibernate : persisting objects with bidirectional one-many relationships gives error "NULL not allowed for column"

hibernate 在需​​要时强制获取惰性字段