当前位置: 首页 > 面试题库 >

在ConstraintViolationException之后,休眠会话无效

周浩淼
2023-03-14
问题内容

在引发约束违规异常之后,有什么方法可以继续使用线程绑定的hibernate会话吗?我在这里举一个简短的例子:

    Parent other=service.load(33); // loads a new parent
    try {
        Parent p=new Parent();
        p.setName("A name");
        service.save(p); // a @Transactional spring service class, throws ConstraintViolationException - name should be at least 15 characters long
    } catch (ConstraintViolationException e){
        // i would like to handle validation errors and proceed normally
        // but the session is allready closed here
    }
    System.out.println("Children: " + other.getChildren()); // lazy initialization exception, even when using opensessioninview

从现在开始,hibernate会话完全没有用,即使对于只读操作,例如使用OpenSessionInView模式在视图中呈现惰性集合。


问题答案:

Session的文档指出,
如果Session引发异常,则必须回滚事务并丢弃会话。 发生异常后,会话的内部状态可能与数据库不一致。

AFAIK,无法从中恢复,我记得工作中有人警告我,由于这些问题,请勿使用session-per-request / OpenSessionInView-
pattern。



 类似资料:
  • 问题内容: 我在hibernate和延迟加载方面遇到问题。 背景:我有一个Spring MVC Web应用程序,我将Hibernate用于持久层。我正在使用OpenSessionInViewFilter使我能够在视图层中延迟加载实体。我正在扩展HibernateDaoSupport类,并使用HibernateTemplate保存/加载对象。一切都进行得很好。直至现在。 问题:我有一个可以通过Web

  • 问题内容: 除以下内容外,我们还有其他区别吗?另外请验证以下内容是否正确 每个应用程序一个对象,每个客户端一个对象。 是创建和管理。是为映射的类提供CRUD接口,并提供更多功能。 是线程安全的,而不是线程安全的 问题答案: 首先,询问这些接口之间的区别没有任何意义。好像在问汽车制造厂和汽车之间的区别。制造工厂是生产汽车的地方。同样,是一个将创建对象的实例。

  • 问题内容: 当我按如下方式调用session.begin事务方法时: 然后我得到以下异常消息 造成此错误的原因是什么? 问题答案: 更新: 我想调用并不能保证该会话实际上是打开的。第一次,您应该使用 代替。该建议实际上与您找到的页面一致。 之前: 根据到目前为止的可用信息,我们可以得出结论,错误的原因是会话未打开;-)

  • 问题内容: 下面的函数是我在Web应用程序中具有的按钮的actionListener,我正在从数据库中的表中删除旧选择的行,并将新行插入数据库中。 我一直在例外:会话关闭!有人可以解释一下如何在hibernate状态下关闭会话(自动吗?)以及如何使用它们。 这是该异常的详细堆栈跟踪: 谢谢, 问题答案: 在Hibernate会话显然配置为基于请求的情况下,您在会话范围内的受管Bean中使用了延迟获

  • 问题内容: 一个只有一个数据库的hibernate会话将保持多少个连接? 问题答案: 在给定的时间,给定的会话将仅保留一个连接,您可以使用connect()方法进行访问。 使用reconnect()方法可以更改所使用的连接。

  • 问题内容: 我刚刚有了Hibernate Session和Connection之间的关系。但是现在,我又遇到一个问题:hibernate会话工厂如何管理会话?在以下代码段中:DAO类的save()方法: 当我们调用时,它将创建一个新会话(通过ThreadLocal附加到当前线程),该会话也附加到JDBC连接。但是,正如您所看到的,我们不需要关闭该会话(会话。 close()),都没有连接。那么,H