Java 如何从 Hibernate 4.3.4.Final 中检索 sessionFactory?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22367759/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to retrieve sessionFactory from Hibernate 4.3.4.Final?
提问by AlexCartio1
Previously I was using the following code to configure the sessionFactory, but after upgrading the version of my hibernate from 4.2.1.Final to 4.3.4.Final, I can not retrieve sessionFactory using the following code as ServiceRegistryBuilder() is deprecated.
以前我使用以下代码来配置 sessionFactory,但在将我的 hibernate 版本从 4.2.1.Final 升级到 4.3.4.Final 后,我无法使用以下代码检索 sessionFactory,因为 ServiceRegistryBuilder() 已弃用。
I used this linkto create it but the provided function is not returning any thing therefore it runs into pre-compile error.
我使用这个链接来创建它,但提供的函数没有返回任何东西,因此它遇到了预编译错误。
private static SessionFactory configureSessionFactory() {
try {
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
} catch (HibernateException e) {
System.out.append("** Exception in SessionFactory **");
e.printStackTrace();
}
return sessionFactory;
}
static {
try {
sessionFactory = configureSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private HibernateUtil() {
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession() throws HibernateException {
Session session = threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession() : null;
threadLocal.set(session);
}
return session;
}
public static void rebuildSessionFactory() {
try {
sessionFactory = configureSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
}
采纳答案by pickypg
In 4.3, you should use the StandardServiceRegistryBuilder
instead.
在 4.3 中,您应该使用StandardServiceRegistryBuilder
代替。
import org.hibernate.boot.registry.StandardServiceRegistryBuilder
StandardServiceRegistryBuilder
was added as a new parentof ServiceRegistryBuilder
. The rest of the code should be the same. The only place that I have found this documented "clearly" is in the 4.3 JavaDocs for ServiceRegistryBuilder
.
StandardServiceRegistryBuilder
被添加为 的新父级ServiceRegistryBuilder
。其余代码应该相同。我发现这个文档“清楚”的唯一地方是 4.3 JavaDocs for ServiceRegistryBuilder
.
One thing that I did not notice was that they changed the ServiceRegistryBuilder.buildServiceRegistry()
method to just StandardServiceRegistryBuilder.build()
. Therefore, it will require you to change that part of your building process:
我没有注意到的一件事是他们将ServiceRegistryBuilder.buildServiceRegistry()
方法更改为 just StandardServiceRegistryBuilder.build()
。因此,它将要求您更改构建过程的那部分:
new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
Becomes:
变成:
new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.build();
回答by zee
Yes, they have deprecated the previous ServiceRegistryBuilder(), here is how you can do it with Hibernate 4.3.4
是的,他们已经弃用了以前的 ServiceRegistryBuilder(),这是您如何使用 Hibernate 4.3.4 做到这一点
public void testConnection() throws Exception {
logger.info("Trying to Connect With a DataBase.");
Configuration configuration = new Configuration();
configuration.configure("Your.cfg.xml");
ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(configuration
.getProperties());
SessionFactory sessionFactory = configuration
.buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry());
Session session = sessionFactory.openSession();
logger.info("Database connection created successfuly.");
}
回答by Koala
I tested this one and it works on Hibernate 4.3.6
我测试了这个,它适用于 Hibernate 4.3.6
public class HUtil{ private static SessionFactory sessionFactory; private static ServiceRegistry serviceRegistry; public static SessionFactory createSessionFactory() { Configuration configuration = new Configuration(); configuration.configure(); serviceRegistry = new StandardServiceRegistryBuilder(). applySettings(configuration.getProperties()).build(); sessionFactory = configuration.configure(). buildSessionFactory(serviceRegistry); return sessionFactory; } public static SessionFactory getSessionFactory() { return createSessionFactory(); } }
public class HUtil{ private static SessionFactory sessionFactory; private static ServiceRegistry serviceRegistry; public static SessionFactory createSessionFactory() { Configuration configuration = new Configuration(); configuration.configure(); serviceRegistry = new StandardServiceRegistryBuilder(). applySettings(configuration.getProperties()).build(); sessionFactory = configuration.configure(). buildSessionFactory(serviceRegistry); return sessionFactory; } public static SessionFactory getSessionFactory() { return createSessionFactory(); } }