如何使用 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 约束?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Spring数据jpa @Query注释直接获取学生列表
Spring Data JPA系列4:Spring声明式事务处理与多数据源支持