【发布时间】:2017-06-23 21:33:54
【问题描述】:
假设我用这样的集合声明了@Entity:
@ManyToMany(fetch = FetchType.LAZY)
private Set<User> users = new HashSet<>();
稍后,您可以致电<my entity>/{id}/users 访问它。
如果该集合中有任何类型的插入(通过POST、PATCH 或PUT 和text/uri-list 内容类型),我想确保您只能添加符合某些条件的用户(例如user.age >= 18)。
如果客户端尝试添加任何其他内容,端点应该返回错误或至少忽略不匹配的用户。
我该怎么做?
我尝试过@Where 子句,但它只是被注入到SELECT 查询中,尽管行实际上是插入到数据库中的。
我试过@FilterJoinTable,就像这里:
@FilterJoinTable(name = "hasRightAge", condition = "age >= 18")
private Set<StorageUser> users = new HashSet<>();
但它没有任何作用。
我也可以使用 Spring 的 Validator,但必须有更好的方法。
【问题讨论】:
-
看看 Bean Validation/Hibernate Validator。
-
@RossiRobinsion 我试过使用
ConstraintValidator。它的验证方法在对一组新用户执行PATCH请求时被触发,但在使用POST请求向集合中添加一个新项目时它们不会被触发。
标签: spring hibernate spring-data spring-data-jpa spring-data-rest