Java 如何从Hibernate 4.3.4.Final检索sessionFactory?
以前我使用以下代码配置sessionFactory,但在将hibernate版本从4.2.1.Final升级到4.3.4.Final后,我无法使用以下代码检索sessionFactory,因为ServiceRegistryBuilder()已被弃用 我曾经创建过它,但是提供的函数没有返回任何东西,因此它会遇到预编译错误Java 如何从Hibernate 4.3.4.Final检索sessionFactory?,java,hibernate,sessionfactory,Java,Hibernate,Sessionfactory,以前我使用以下代码配置sessionFactory,但在将hibernate版本从4.2.1.Final升级到4.3.4.Final后,我无法使用以下代码检索sessionFactory,因为ServiceRegistryBuilder()已被弃用 我曾经创建过它,但是提供的函数没有返回任何东西,因此它会遇到预编译错误 private static SessionFactory configureSessionFactory() { try { Conf
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();
}
}
}
在4.3中,您应该使用
StandardServiceRegistryBuilder
已添加为ServiceRegistryBuilder
的新父级。代码的其余部分应该是相同的。我发现这个文档“清晰”的唯一地方是4.3Javadocs for
我没有注意到的一件事是,他们将方法更改为just。因此,它将要求您更改建筑过程的该部分:
new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
变成:
new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.build();
是的,他们已经弃用了以前的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.");
}
来源:我测试了这个,它在Hibernate 4.3.6上运行
您的方法
setField
的作用是什么?毕竟,它听起来非常关键……它返回以下错误java.lang.reflect.InvocationTargetException,java.lang.NoSuchMethodError:org.hibernate.integrator.internal.IntegratorServiceImpl(Ljava/util/LinkedHashSet;Lorg/hibernate/boot/registry/classloading/spi/ClassLoaderService;)VMessages:org.hibernate.integrator.internal.IntegratorServiceImpl.(Ljava/util/LinkedHashSet;Lorg/hibernate/boot/registry/ClassLoaderService;)V文件:org/hibernate/boot/registry/BootstrapServiceRegistryBuilder.java行号:215确保已从类路径中删除所有以前版本的hibernate。从上面看,我不明白为什么会出现这种情况,除非您的类加载器问题是由版本冲突引起的,因为您正在/正在使用的两个版本中都存在integratorserviceinpl
,这向我暗示了类加载器问题。@pickypg请也看看我的问题,ServiceRegistryBuilder在版本4.3.4.Finalversion 4.3.4.Final@AlexCartio1上被弃用。您的问题标题中已经提到了哪个版本的详细信息。无论如何,为了更加清晰,我添加了.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.");
}
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();
} }