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

DAO,Hibernate和Web项目中的会议

齐奕
2023-03-14
问题内容

我已经阅读了很多有关DAO和会话的问题,但不理解问题。现在,我使用这样的方式:核心DAO(我在核心DAO中添加了一些其他检查)和基于wicket框架的Web项目的DAO实现。通常,这种模式可以描述为:

1)每1个线程使用1个会话;

2)永不关闭会话;

3)始终在操作后提交事务。

我使用DDoS实用程序对其进行了测试,并且该实现工作有效(每秒100个连接)。但是,当我增加连接数时,在关闭会话而不是开始事务方面会有很多例外。我的理解是我应该使用getCurrentSession()而不是openSession(),但是当我使用getCurrentSession()在核心DAO中修改方法getSession()时,我没有解决错误:(。然后我尝试使用c3p0和bonecp。强大的工具对我没有帮助。也许您可以解释我的错误:(除了DNA中的错误


问题答案:

您从任何地方复制的DAO,将hibernate会话存储在ThreadLocal对象中,即,正如您提到的,一个hibernate会话绑定到一个线程。

但是您正在做一个Web项目。在那里,您应该将一个Hibernate会话绑定到一个用户(或浏览器),即一个Http会话。但是您不知道在哪个线程中处理来自一个http会话的请求。因此,在您的解决方案中,相同的Http会话可能会获得不同的Hibernate会话,或者也许不同的Http会话可能会获得相同的Hibernate会话。这取决于您的Http服务器

解决方案:把Hibernate会话到HTTP会话(并 没有
使用ThreadLocal的对象)。你得到HTTP会话对象,具有HttpServletRequest.getSession()HttpSession.getAttribute()/
HttpSession.setAttribute()你可以设置Hibernate的Session和其他HTTP会话相关的数据。



 类似资料:
  • 问题内容: 如果有什么问题请指正。 现在,当我们将Spring DAO用于ORM模板时,当我们使用@Transactional属性时,从外部而不是在方法内部调用该方法时,我们将无法控制事务和/或会话。 延迟加载可节省资源-减少对数据库的查询,减少将所有集合保持在应用程序内存中的内存。 因此,如果lazy = false,则在链接集中有10,000条记录的情况下,所有相关联的集合都将被提取,这并不是

  • 我刚刚学会了spring和hibernate,当我锻炼的时候,我有一些错误,如下所示: 这是我的hibernate.xml 这是我的pom.xml 我已经试图解决这个错误,但还没有修复它,那么有人能帮我吗?

  • 我在Ubuntu12.10上运行NetBeans7.3。我正在学习一门Java Web开发课程,所以我有一个名为jsage8的项目,其中包含了我为该课程所做的工作。以前,这个项目在Projects选项卡中显示得很好,但现在打开这个项目什么也做不到。当我在打开项目菜单中单击打开它时,它只是说“没有项目打开”。然而,它将打开一个不是基于web的项目的普通Java项目文件夹。目前项目中只有一个index

  • 我使用多种工具进行持续集成: Maven 3.0.4 Java项目和XML项目一切正常。 我在Javascript和web项目上遇到了麻烦。项目在声纳中创建,但它们是空的。 下面是一个javascript项目的stacktrace示例 [信息]---sonar maven插件:2.0-beta-2:sonar(默认cli)@MyProject--- [INFO]声纳版本:3.3 [INFO][15

  • 问题内容: 在使用hibernate时,我们将遵循Hibernate Doc中提到的通用Hibernate DAO模式。 因此,据此,我们目前为接口2)维护两个并行的层次结构1)以实现 因此,即使我们在标准持久性方法之外没有提出任何新方法的情况下以这种方式进行工作,我们也需要为该对象及其实现创建标记界面。 尽管这种方法及其明确的分隔似乎没有问题。 我的问题是是否有更好的方法/替代方法来实现这一目标

  • 问题内容: 我的web应用程序已经得到了很多服务表/实体,如,等。 每次添加新实体时,都必须编写一个DAO。问题是,它们基本上是相同的,但是唯一的区别是实体类本身。 我知道Hibernate工具可以为我自动生成代码,但是我现在不能使用它们(不要问为什么),所以我想到了Generic DAO。关于这方面有很多文献,但我无法整理并使其与Spring一起使用。 我认为这全都是关于泛型的,它将有四种基本方