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

Spring/Hibernate:每次VS getCurrentSession时打开/关闭会话

路阳华
2023-03-14
问题内容

这些方法之间有什么区别,哪种更好?到现在为止,我的代码如下:

public void delete(Song song) {
    session = sessionFactory.getCurrentSession();
    session.delete(song);
    session.flush();
}

但是在运行上述代码时,记录并不总是被删除(精确地:id = 1永远不会被删除,而其他id总是被删除)。我读到保持打开的会话可以稍微加快应用程序的速度-
这就是为什么我要共享会话对象。我的业务对象通过DI获取会话工厂:

@Autowired
private SessionFactory sessionFactory;

Session session = null;

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

问题答案:

根据我在Hibernate的经验,得出的结论是,最好的策略是使Hibernate会话寿命与单个事务的持续时间相匹配。根据您的特定需求,您可能还需要做其他事情,但是我敢相信,提议的策略可以在95%的实际案例中起作用。



 类似资料:
  • 我有下面的方法,每隔几秒钟插入一大批记录。运行一段时间后,我得到如下错误: 错误:通信链接失败 从服务器成功接收的最后一个数据包是523毫秒前。上次成功发送到服务器的数据包是8毫秒前。 May 16, 2013 9:48:30 AM com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement INFO: 签入语句问题,丢弃。 com

  • 有关您编写的代码问题的问题必须描述特定问题-并且在问题本身中包含有效代码以重现它。有关指导,请参阅SSCCE. org。 在我的应用程序中,我有一个模块,用于在数据库中搜索用户并在jsp内的表中显示他们的信息。我只是在应用程序中设置了Spring Security性。我能够从登录页面连接到数据库,尽管出于某种原因,DAO的CRUD操作(在本例中是搜索)都不起作用。 谢谢,如果我能提供更多信息,请告

  • 我有: < Li > Camel route(transactioned = true),从MQ队列消费 < li >使用Spring的websphereowtransactionmanager < li >事务性起作用 < li >在IBM Liberty上运行 但是,我收到以下消息: 这似乎与另一个堆栈溢出问题有关,但我已经尝试更改服务器中的配置。xml,但没有成功。

  • 大家好,正在使用Spring+JPA/Hibernate+Maven并尝试从DB获取记录。所以当我朗姆酒时,我的应用程序会出现如下错误 这是一段代码

  • 我为PHP代码设置了一个Cron作业,使其每20分钟运行一次。但它每次都会杀死EC2T2Micro实例。以下是服务器日志。Pls帮助。 ip-172-31-42-52登录:[20332.164336]内存不足:杀死进程1241(java)得分174或牺牲子 [20332.192538]杀死进程1241(java)总计-VM:1473180KB,Anon-RSS:176012KB,文件-RSS:0K

  • 我有一个运行完整的Spring MVC应用程序,运行Spring Security,但每当服务器有一段时间不活动,有人试图登录时,我就会出现以下错误: HTTP状态500-请求处理失败;嵌套的异常是org。springframework。交易CannotCreateTransactionException:无法为事务打开Hibernate会话;嵌套的异常是org。冬眠TransactionExce