Hibernate 如何对唯一复合密钥进行验证检查
我想通过扩展play.data.validation.check来定义我自己的检查约束,这样我就可以显示自定义的验证消息 然而,检查似乎只适用于一个字段。 是否有其他方法对多个字段执行此验证检查 更新-解决方案Hibernate 如何对唯一复合密钥进行验证检查,hibernate,validation,jpa,playframework,Hibernate,Validation,Jpa,Playframework,我想通过扩展play.data.validation.check来定义我自己的检查约束,这样我就可以显示自定义的验证消息 然而,检查似乎只适用于一个字段。 是否有其他方法对多个字段执行此验证检查 更新-解决方案 @Entity @Table(uniqueConstraints = @UniqueConstraint(columnNames = { "field1", "field2"})) public class A extends Model{ public String field1
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "field1", "field2"}))
public class A extends Model{
public String field1;
public String field2;
}
使用JPA注释将确保您不能将坏数据放入数据库,但严格来说不能进行验证。你会得到一个例外 我想看看Hibernate验证器。它允许开箱即用的单字段验证,您可以实现自己的注释来执行更复杂的场景。它也是Bean验证JSR-303的参考实现
不,只玩,让我们分别验证每个字段。但是,您可以创建自己的复合字段,该字段包含在单独的类中,并将其添加到主对象中,例如:
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "field1", "field2"}))
public class A extends Model{
@CheckWith(UniqueFieldsCheck.class)
public String field1;
public String field2;
static class UniqueFieldsCheck extends Check {
public boolean isSatisfied(Object obj, Object o) {
boolean satisfied = true;
A a = (A)obj;
A aA = A.find("byField1AndField2", a.field1, a.field2).first();
if (aA != null) {
setMessage("This fields should be unique.");
satisfied = false;
}
return satisfied;
}
}
}
然后对其应用自定义验证程序(更多相关内容)我认为不能将Hibernate验证库添加到Play项目中。
public class A extends Model{
@CheckWith(value = UniqueUserCheck.class, message = "error.not.unique")
public ComplexField complexField;
}
public class ComplexField {
public String field1;
public String field2;
}