2014-01-14 12 views
4
public class HibernateSession { 

private static final SessionFactory sessionFactory = buildSessionFactory(); 
private static StandardServiceRegistry serviceRegistry; 

private static SessionFactory buildSessionFactory() { 
    try { 
     Configuration configuration = new Configuration(); 
     configuration.configure("hibernate.cfg.xml"); 
     StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder(); 
     serviceRegistry = serviceRegistryBuilder.build(); 
     SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
     return sessionFactory;    
    } catch (Throwable ex) { 
     System.err.println("Initial SessionFactory creation failed!" + ex); 
     throw new ExceptionInInitializerError(ex); 
    } 
} 

public static SessionFactory getSessionFactory() { 
    return sessionFactory; 
} 

}StandardServiceRegistryBuilder不工作

我使用Hibernate 4.3。我收到一條錯誤消息「當'hibernate.dialect'未設置時,對DialectResolutionInfo的訪問不能爲空。 StandardServiceRegistryBuilder有問題。由於ServiceRegistryBuilder已被棄用,因此是首選。請爲我提供解決此問題的方法。

我的hibernate.cfg.xml文件看起來是這樣的 -

<?xml version="1.0" encoding="UTF-8"?> 

<!-- Database connection settings --> 
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="connection.url">jdbc:mysql://localhost:3306/company_db</property> 
    <property name="connection.username">root</property> 
    <property name="connection.password">root</property> 

    <!-- JDBC connection pool (use the built-in) --> 
    <property name="connection.pool_size">1</property> 

    <!-- SQL dialect --> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

    <!-- Disable the second-level cache --> 
    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> 

    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</property> 

    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">true</property> 

    <!-- Drop and re-create the database schema on startup --> 
    <!-- <property name="hbm2ddl.auto">create</property> --> 

    <mapping resource="com/twopiradian/Employee.hbm.xml" /> 

</session-factory> 

回答

0

你可能需要添加這樣的:

serviceRegistryBuilder.applySettings(configuration.getProperties()); 

之前調用serviceRegistryBuilder.build()按照此信息:https://stackoverflow.com/a/21017111/1617124

+0

我已經解決了這個問題。除了applysettings添加一個「休眠」的事實之外,configure和applysettings的方法大部分是相同的。在數據庫設置中的每個屬性前添加前綴。在xml中手動添加前綴也可以解決問題。 – Suva

0

oracle.jdbc.driver.OracleDriver JDBC:預言:瘦:@localhost:1521:XE 小時 小時

<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> 
    <property name="hibernate.show_sql">true</property> 

    <mapping resource="com/org/Employee.hbm.xml"/> 
</session-factory> 

Demo.java文件

import java.util.Properties; 
import org.hibernate.cfg.Configuration; 


public class Demo { 

    public static void main(String[] args) 
    { 
     Employee emp=new Employee(); 
     emp.setNme("Ravi"); 
     emp.setSal(1000); 

     Configuration con= new Configuration(); 
     con.configure(); 
     Properties prop=con.getProperties(); 
     ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(con.getProperties()).build(); 

    } 

}