我正在使用GWT RequestFactory与服务器通信。在服务器中我使用hibernate并实现一个会话每请求模式来控制会话。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try {
sf.getCurrentSession().beginTransaction();
chain.doFilter(request, response);
sf.getCurrentSession().getTransaction().commit();
} catch (Throwable ex) {
ex.printStackTrace();
sf.getCurrentSession().getTransaction().rollback();
}
}
在模型中,我使用注释进行了一些验证。问题是当我尝试使用无效信息持久保存此实体时,验证通常会返回通过onViolation方法查看消息,但无论如何该信息都会保存在数据库中。
我发现hibernate总是保存模型,即使不调用保存方法。
在请求工厂中,它甚至没有触及 persist 方法。它在 findXxxx 方法中停止。
我有什么办法可以解决这个问题?我的目标是不允许实体持有无效信息。
我不知道这对于这个案例是否重要,但是我使用了休眠的MultiTenancy。
答案 0 :(得分:0)
这是预期的行为。
RequestFactory要求每个请求一个会话,但这并不意味着每个请求一个事务!您应该在每种服务方法中打开/关闭交易(例如,您的persist()
方法)。