即使无效,模型也会更新

时间:2014-03-22 01:02:02

标签: hibernate validation gwt requestfactory

我正在使用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。

1 个答案:

答案 0 :(得分:0)

这是预期的行为。

RequestFactory要求每个请求一个会话,但这并不意味着每个请求一个事务!您应该在每种服务方法中打开/关闭交易(例如,您的persist()方法)。