【问题标题】:Hibernate @Check annotation not working at the field levelHibernate @Check 注释在字段级别不起作用
【发布时间】:2020-03-22 08:37:46
【问题描述】:

我在字段级别使用了@Check注解,但是hibernate不会在数据库上创建检查约束。我研究了这是一个bug,@Check注解只能在类级别使用一次。好的,但是如何在类级别添加多个约束?我不想将所有条件都添加到同一个约束中。

@Entity
public class TemplateTest{

    @Id
    private String id;

    @Column(length = 20, nullable = false)
    private String name;

    @Column(precision = 5, scale = 2, nullable = false)
    @Check(constraints = "AMOUNT > 0")
    private BigDecimal amount;

    @Column(nullable = false)
    @Check(constraints = "DISPLAY_ORDER > 0")
    private int displayOrder;

}

@Entity
@Check(constraints = "DISPLAY_ORDER > 0 and AMOUNT > 0")
public class TemplateTest{

    @Id
    private String id;

    @Column(length = 20, nullable = false)
    private String name;

    @Column(precision = 5, scale = 2, nullable = false)
    private BigDecimal amount;

    @Column(nullable = false)
    private int displayOrder;

}

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:
    1. 可以使用@Column注解的columnDefinition属性:
    @Entity
    public class TemplateTest{
    
        @Id
        private String id;
    
        @Column(length = 20, nullable = false)
        private String name;
    
        @Column(precision = 5, scale = 2, nullable = false, columnDefinition = "bigint check(AMOUNT > 0)")
        private BigDecimal amount;
    
        @Column(nullable = false, columnDefinition = "bigint check(DISPLAY_ORDER > 0)")
        private int displayOrder;
    }
    
    1. 作为替代方案,您可以使用importing script file 添加其他约束。

    要自定义模式生成过程,hibernate.hbm2ddl.import_files 配置属性必须用于提供其他脚本文件,以便在启动 SessionFactory 时 Hibernate 可以使用。

    <property name="hibernate.hbm2ddl.import_files" value="schema-generation.sql" />
    

    在模式自动生成后,Hibernate 将执行脚本文件。

    【讨论】:

    • 我不想覆盖hibernate生成的数据类型,也许我会使用另一个关系数据库。
    • @SeymurAsadov 作为替代方案,您可以使用导入脚本文件(请参阅我更新的答案)。
    • 您还提到这是一个错误,您能否提供指向休眠问题的链接来证明这一点。
    猜你喜欢
    • 2010-12-24
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多