我已经要求说明用户可以保存'一个foo
根本没有验证,但如果他们提交了#39;那么必须验证对象。我已经在Parsley.js的前端构建并使用了这个,但是想要添加后端验证。
使用Spring / Boot执行此操作的典型方法是什么?我理解基本的JPA验证,但我不知道如何有条件地应用它。
我还想提一下,我试图用Foo
的两个子类来做这件事,但是我无法管理切换类型,要么是因为它在Java中不可能,要么是因为我不了解如何实例化该对象的新版本,并期望它为.equals()
旧版本的Hibernate持久性。
感谢您的任何见解。
答案 0 :(得分:1)
使用JSR 303 Validation Groups。这为您提供了条件验证。
在处理程序方法中使用Spring @Validated。这使您可以在控制器中应用不同的验证
按照我的示例:http://blog.databasepatterns.com/2014/06/draft-entities-hibernate-validator.html
答案 1 :(得分:0)
JPA不可能进行条件验证。
为什么呢?因为许多验证只是JPA未验证的数据库约束,而是数据库无条件验证。
例如
@NotNull
private Integer value;
将创建一个NOT NULL
约束的列。
或者
@Size(max = 100)
private String value;
将创建一列VARCHAR(100)
正如您可能理解的那样,无法将值保存到打破大小约束且超过100个字符的列中。
确实 - 切换 Java中的对象类型是不可能的。
您可以将Entity1
转换为Entity2
,但这只是编译器的变量。对象本身是Entity1
- 无论你尝试什么。但您可以将<{1}}的实例中的所有值复制到Entity1
的新实例:
Entity2
如果您不想手动复制所有属性,可以使用Apache BeanUtils中的Entity1 entity1 = ...
Entity2 entity2 = new Entity2();
entity2.setProperty(entity1.getProperty());
...
entityManager.persist(entity2);
entityManager.delete(entity1);
。