【问题标题】:How to declare CHECK constraint with Spring JPA?如何使用 Spring JPA 声明 CHECK 约束?
【发布时间】: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 相同。

标签: java spring jpa spring-data-jpa check-constraints


【解决方案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 端?我宁愿不碰表定义
猜你喜欢
  • 1970-01-01
  • 2021-07-28
  • 2022-01-11
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多