我有两个@Entity豆。豆一是第二个的“一对多”。Bean1 和 Bean2 具有 JSR303 不同的注释验证器。
@Entity
class Bean1 {
@OneToMany
private List<Bean2> var;
//other fields marked with JSR303
}
@Entity
class Bean2 {
//other fields marked with JSR303
}
我的任务,是验证内部Bean2。首先,我有控制器,带有@Val的Bean1
@Controller
class Controller {
public String methodPOST(@Validated Bean1 bean1, BindingResult errors)
}
Hibernate在尝试持久化到DB之前会自动验证JSR303。所以,我甚至没有任何来自Bean2的验证异常,因为Spring不处理它们,Hibernate抛出它。
我可以创建类似DTO bean的东西,并验证它们,如果将内部Bean2DTO标记为@Valid,它将被验证,并且Hibernate端不会抛出异常,因为在持久化之前没有验证。同样,在这种情况下,我将在控制器方法中填充BindingResult。
是否有获得javax.validation的解决方案。ConstraintViolationException从Hibernate org.hhibernate.cfg.beanvalidation.BeanValidationEventListener.validate(..)抛出到我的BindingResult中,没有上述两个选项。
此外,我不能在持久化之前禁用Hibernate自动验证,因为其他数量的逻辑已损坏。
谢谢。
可能的重复可以在这里找到
概括地说,您需要用@Valid注释您的嵌套属性
@Entity
class Bean1 {
@OneToMany
@Valid
private List<Bean2> var;
//other fields marked with JSR303
}
@Entity
class Bean2 {
//other fields marked with JSR303
}
这也应该触发Spring中的嵌套验证(假设它也配置了JSR-303验证器)。
调用init方法失败;嵌套的异常是javax。坚持不懈PersistenceException:[PersistenceUnit:默认值]无法生成Hibernate SessionFactory 在更换系统中的操作系统后,我遇到了这个异常。在我的应用程序运行MySQL 5.7和java 8之前。现在我把它改成了mySQL 8和java 8。代码没有任何变化。原因一定是什么?? 下面是日志:
persistenceException:DB2 SQL错误:sqlcode=-206,sqlstate=42703,sqlerrmc=t0.id,driver=3.52.95{prepstmnt 1029586270
我使用JPA和Hibernate作为容器管理事务的提供者(JBossAS 6.1.0.Final)。 我正在尝试实现一些细粒度的异常处理,因为我的应用程序上有一个特定的异常层次结构,所以我可以定义在任何情况下要做什么。因此,我已经研究了几个小时,发现文档很模糊,示例也有些原始,因为“为了清晰起见”总是忽略异常处理,或者是一个简单的try-catch块,用于处理异常e。 例如,采用以下代码: cat
异常处理就是这样工作的吗?
我一直在尝试使用JPA Hibernate和mysql整理与我的DB的连接,但出于某种原因,无论我尝试什么,在启动tomcat服务器时,我都会遇到相同的异常: 这是我的JPA配置类: } 在这一点上,我想不出还有什么可以尝试的。。任何帮助都是非常感激的 编辑:这是整个堆栈跟踪
我错过了什么?我找不到任何处理这种异常的例子(例如,唯一的Contains)。