如何使用 Spring JPA 声明 CHECK 约束?

Posted

技术标签:

【中文标题】如何使用 Spring JPA 声明 CHECK 约束?【英文标题】:How to declare CHECK constraint with Spring JPA? 【发布时间】:2015-12-22 17:48:29 【问题描述】:

如何知道Spring JPA支持哪些数据注解?

例如,是否支持@Min

   @Min(value = 0)
   private double calories;

无论如何,如何声明CHECK 约束?

更新

请阅读CHECK constraint。另请注意,@Min 是一个超链接。

【问题讨论】:

“Spring JPA”除了在 JPA API 之上提供一个层之外什么都不做。 JPA API 没有为在数据存储中添加 CHECK 约束明确提供任何内容,但允许您指定 columnDetails。查看javadocs 谢谢。但是怎么知道不支持javax.validation.constraints.Min呢? 除了问题。这与 Spring JPA 或 JPA 本身无关。这称为 Bean Validation(以前称为 JSR 303。Hibernate Validator 是 JSR 303 的参考实现。它是 JSR 349,从 Bean Validation 1.1 开始)。 所以,请有人回答CHECK 约束不存在注释,唯一的方法是columnDetails 选项。我也想删除反对票,因为问题是绝对正常的。 您始终可以创建自己的自定义验证约束,与底层数据库中的CHECK 相同。 【参考方案1】:

关于javax.validation API 执行的验证我不知道。但是您可以使用 @javax.persistence.Column 注释声明一个约束。例如,要创建一个检查约束以强制只接受 VARCHAR 列的某些值,您可以使用以下代码:

@Column(columnDefinition = "VARCHAR(60) CHECK (status IN ('ACTIVE', 'PENDING', 'INACTIVE')))
private String status;

【讨论】:

我同意。 javax.validation API 是验证值的最佳选择 这会改变表定义还是只是在执行save() 之前检查java 端?我宁愿不碰表定义

以上是关于如何使用 Spring JPA 声明 CHECK 约束?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用JPA实现Spring 授权服务器的核心服务

如何使用Spring数据jpa @Query注释直接获取学生列表

Spring Data JPA系列4:Spring声明式事务处理与多数据源支持

Spring Data Jpa 注解式查询方法

spring 声明式事务管理在真实的Service和单元测试时的回滚情况,需要注意的问题,jpa为例子

Spring JPA 主键