2012-01-12 161 views
17

我不想擁有hibernate.cfg.xml文件。相反,我想通過我的代碼完成所有配置,如下所示。是否需要配置hibernate.cfg.xml文件

private static final SessionFactory factory; 
private static final Properties properties; 

static 
{ 
    properties = new Properties(); 
    properties.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
    properties.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/books"); 
    properties.setProperty("hibernate.connection.username", "jhtp7"); 
    properties.setProperty("hibernate.connection.password", "password"); 
    properties.setProperty("hibernate.show_sql", "com.mysql.jdbc.Driver"); 
    properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); 

    factory = new Configuration().setProperties(properties).configure(). 
          buildSessionFactory(); 
} 

我試過上面的方法。但是我面臨的問題是,hibernate拋出一個異常說「./hibernate.cfg.xml file missing」。

是否真的必須保留hibernate.cfg.xml文件?

在此先感謝

回答

20

我相信是因爲你的configure()打電話給Configuration的對象。嘗試刪除,休眠不會尋找不存在的文件。基本上你通過properties對象設置所有必需的屬性,所以沒有必要告訴Hibernate尋找一個hibernate.cfg.xml文件,這正是configure()方法所做的。

10

不,我不認爲配置xml是強制性的。要解決您的問題,我認爲您需要使用org.hibernate.cfg.Configuration類。看看這個鏈接:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html

基本上,你需要的東西像

Configuration cfg = new Configuration() 
.setProperty("hibernate.dialect", "com.mysql.jdbc.Driver") 
.setProperty("hibernate.connection.datasource", "jdbc:mysql://localhost:3306/books") 
.setProperty("hibernate.order_updates", "true"); 

然後創建SessionFactory的,你剛纔說,cfg.buildSessionFactory();

6

不,它不是必須使用hibernate.cfg.xml。只是不要使用.configure()。 如果我們使用.configure(),Hibernate將查找hibernate.cfg.xml。

public class HibernateUtil { 
    private static SessionFactory sessionFactory ; 
    static { 
     Configuration configuration = new Configuration(); 

     configuration.addAnnotatedClass (org.gradle.Person.class); 
     configuration.setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver"); 
     configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/hibernate");         
     configuration.setProperty("hibernate.connection.username", "root");  
     configuration.setProperty("hibernate.connection.password", "root"); 
     configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); 
     configuration.setProperty("hibernate.hbm2ddl.auto", "update"); 
     configuration.setProperty("hibernate.show_sql", "true"); 
     configuration.setProperty(" hibernate.connection.pool_size", "10"); 

     StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); 
     sessionFactory = configuration.buildSessionFactory(builder.build()); 
    } 
    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 
+0

如果要在控制檯上記錄sql查詢,請使用:configuration.setProperty(「hibernate.show_sql」,「true」); – Deepak 2015-10-12 16:23:50

+0

那麼如何指定映射? – digz6666 2016-08-30 05:13:38

+2

通過這種方式:configuration.addAnnotatedClass(org.gradle.Person.class); – Deepak 2016-08-31 04:07:31