Java servlets中通过Hibernate的数据库连接

Java servlets中通过Hibernate的数据库连接,java,hibernate,orm,servlets,Java,Hibernate,Orm,Servlets,在servlet中,返回HibernateSessionFactory的Hibernate代码的最佳位置是什么 我看到了很多例子:在服务方法中放置db连接的例子。其他-使用smth,比如返回HibernateSessionFactory的HibernateUtil(Singleton) 我不知道在多线程servlet中使用HibernateUtil是否安全?通常,您应该直接使用MVC框架支持servlet,但这不是您的问题,我假设您有充分的理由实现自己的servlet。关于答案 按此-: 实现者

在servlet中,返回HibernateSessionFactory的Hibernate代码的最佳位置是什么

我看到了很多例子:在服务方法中放置db连接的例子。其他-使用smth,比如返回HibernateSessionFactory的HibernateUtil(Singleton)


我不知道在多线程servlet中使用HibernateUtil是否安全?

通常,您应该直接使用MVC框架支持servlet,但这不是您的问题,我假设您有充分的理由实现自己的servlet。关于答案

按此-:

实现者必须是线程安全的

SessionFactorys
是不可变的。
会话工厂的行为由配置时提供的属性控制。这些属性在
环境中定义

因此,可以共享
SessionFactory
s的实例


事实上,根据我的经验,您的HibernateUtil方法是更好的方法,因为SessionFactory创建可能非常昂贵。

使用该模式(请参阅筛选器实现)。

您使用的是什么DBCP?我看到了两个选项:cp3o和tomcat CP。关于MVC:我使用GWT作为前端,所以我不需要使用MVC,因为GWT是前端并不意味着你应该避免在服务器端使用MVC作为模式。servlet实际上最好用作控制器。您的servlet确实应该将数据访问权委托给您的另一组使用hibernate的类。您的servlet应该完全不知道hibernate是否存在。@BlackLite我建议您在servlet容器(比如Tomcat)中设置数据源,并通过JNDI访问它。您可以在这里找到一些示例——而且,我同意whaley的观点,您的servlet(我假设这些是GWT RPC servlet)应该充当“控制器”。您的Hibernate内容应该隐藏在DAO后面,理想情况下,您应该在两者之间有一个层(有时称为“管理器”或“外观”)。