Hibernate Framework中的StandardServiceRegistryBuilder和ServiceRegistry

时间:2017-09-08 11:29:56

标签: hibernate

我正在尝试使用Spring和Hibernate框架开发一个简单的CRUD应用程序。我正在接受Hibernate Tutorials : CRUD example in hibernate教程的帮助。

在本教程中,有一个单独的类,用于创建会话工厂。

class WebViewChatDataOutputView(generics.RetrieveAPIView):
    lookup_field = 'chat_id'
    queryset = Chat.objects.all()
    serializer_class = ChatSerializer

但我不明白为什么在这里使用以下内容,他们的目的是什么。

package com.hibernatetest.utils;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public class SessionManagerUtil {

 private static final SessionFactory sessionFactory = buildSessionFactory();

 private static SessionFactory buildSessionFactory() {

 Configuration config = null;
 StandardServiceRegistryBuilder regBuilder = null;
 ServiceRegistry serviceReg = null;

 try {

 config = new Configuration();
 config.configure("hibernate.cfg.xml");

 regBuilder = new StandardServiceRegistryBuilder();
 regBuilder.applySettings(config.getProperties());

 serviceReg = regBuilder.build();

 return config.buildSessionFactory(serviceReg);

 } catch (Exception e) {
 throw new ExceptionInInitializerError(e.getMessage());
 }

 }

 public static SessionFactory getSessionFactory() {
 return sessionFactory;
 }
}

如果你能解释一下,那对我来说真的很有帮助。

1 个答案:

答案 0 :(得分:0)

StandardServiceRegistryBuilder regBuilder ;
ServiceRegistry serviceReg ;

如果你这样写,它将显示编译时错误。它们没有初始化,只是它们被声明,你可能认为它们可以在try中初始化,因为你在try块中使用它们。如果在初始化语句之前try块中有任何异常,则它将进入catch块。在处理异常之后,现在catch块执行后的语句,可能有一些机会在catch之后使用这两个引用,因为没有初始化我们不能使用它们,JVM识别这些问题并在编译时显示错误本身。这就是他们用null引用初始化的原因。