我正在尝试使用带有RequestFactory(GWT 2.5)的JPA和Hibernate在字段上实现唯一值约束。我的其他约束是使用JSR303实现的,我想以相同的方式向客户端报告违规行为(在onConstraintViolation
中调用Receiver
)。据我了解,实现此类约束的最佳选择是在使用unique = true
属性时设置@Column
。然后,在提交事务时由数据库强制执行此操作,并避免与通过查询声明唯一性相关的任何竞争条件。
我遵循了this thread's关于实现ServiceLayerDecorator
的建议,以便使用事务的开始和提交来包装invoke
方法。如果违反了唯一性约束,则提交操作将抛出RollbackException
。
如何处理此异常,以便将其作为约束违规而不是通用故障传播到客户端?
据我所知,SimpleRequestProcessor
,验证与调用分开进行,似乎没有一种明显的方式以这种方式从invoke
传播失败。< / p>
答案 0 :(得分:0)
您可以尝试实现自定义约束以检查唯一性。另请参阅https://community.jboss.org/wiki/AccessingTheHibernateSessionWithinAConstraintValidator。