2016-10-15 3 views
1

を作成:)Hibernateは、hbm2ddl.auto =アップデートでいくつかのテーブルを維持hbm2ddl.autoでいくつかのテーブルをリロード=

名前が休止状態5.2.2で、それが可能であれば私がお聞きしたいのですが示唆するようにいくつかのテーブルではhbm2ddl.auto = updateを使用し、他のテーブルではhbm2ddl.auto = createを使用します。または、コードを定義して、新しいテーブルを作成したいだけでなく、更新したいだけの時間を追加することもできますか?

私はそれが機能したいと思いますかHibernateConnectorの例:

public class HibernateConnector { 

private static HibernateConnector me; 
private Configuration cfg; 
private SessionFactory sessionFactory; 


private HibernateConnector(boolean db) throws HibernateException { 
    if (db) { 
     cfg = new Configuration(); 
     cfg.addAnnotatedClass(A.class); 
     cfg.addAnnotatedClass(B.class); 

     cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
     cfg.setProperty("hibernate.connection.url", "jdbc:mysql:XXX"); 
     cfg.setProperty("hibernate.connection.username", "XXX"); 
     cfg.setProperty("hibernate.connection.password", "XYZ"); 
     cfg.setProperty("hibernate.show_sql", "true"); 
     cfg.setProperty("hibernate.hbm2ddl.auto", "create"); 
     sessionFactory = cfg.buildSessionFactory(); 
    } else { 
     cfg = new Configuration(); 
     cfg.addAnnotatedClass(A.class); 
     cfg.addAnnotatedClass(B.class); 
     cfg.addAnnotatedClass(C.class); 
     cfg.addAnnotatedClass(D.class); 

     cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
     cfg.setProperty("hibernate.connection.url", "jdbc:mysql://XXX"); 
     cfg.setProperty("hibernate.connection.username", "XYZ"); 
     cfg.setProperty("hibernate.connection.password", "XXX"); 
     cfg.setProperty("hibernate.show_sql", "true"); 
     cfg.setProperty("hibernate.hbm2ddl.auto", "update"); 
     sessionFactory = cfg.buildSessionFactory(); 
    } 
} 

public static synchronized HibernateConnector getInstance() throws HibernateException { 
    if (me == null) { 
     me = new HibernateConnector(false); 
    } 
    return me; 
} 

public static synchronized HibernateConnector getDBInstance() throws HibernateException { 
    if (me == null) { 
     me = new HibernateConnector(true); 
    } 
    return me; 
} 

public Session getSession() throws HibernateException { 
    Session session = sessionFactory.openSession(); 
    if (!session.isConnected()) { 
     this.reconnect(); 
    } 
    return session; 
} 

private void reconnect() throws HibernateException { 
    this.sessionFactory = cfg.buildSessionFactory(); 
} 
} 

はありがとうと素敵な一日:)

答えて

0

[OK]を持っているので、私は正確に私は私の質問でそれを持っている方法は、これを解決しました。私はこれが最善の解決策である完全にわからないHibernateConnector

private HibernateConnector(boolean db) throws HibernateException { 
if (db) { 
    cfg = new Configuration(); 
    cfg.addAnnotatedClass(A.class); 
    cfg.addAnnotatedClass(B.class); 

    cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
    cfg.setProperty("hibernate.connection.url", "jdbc:mysql:XXX"); 
    cfg.setProperty("hibernate.connection.username", "XXX"); 
    cfg.setProperty("hibernate.connection.password", "XYZ"); 
    cfg.setProperty("hibernate.show_sql", "true"); 
    cfg.setProperty("hibernate.hbm2ddl.auto", "create"); 
    sessionFactory = cfg.buildSessionFactory(); 
} else { 
    cfg = new Configuration(); 
    cfg.addAnnotatedClass(A.class); 
    cfg.addAnnotatedClass(B.class); 
    cfg.addAnnotatedClass(C.class); 
    cfg.addAnnotatedClass(D.class); 

    cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
    cfg.setProperty("hibernate.connection.url", "jdbc:mysql://XXX"); 
    cfg.setProperty("hibernate.connection.username", "XYZ"); 
    cfg.setProperty("hibernate.connection.password", "XXX"); 
    cfg.setProperty("hibernate.show_sql", "true"); 
    cfg.setProperty("hibernate.hbm2ddl.auto", "update"); 
    sessionFactory = cfg.buildSessionFactory(); 
} 
} 

するための2つの別々の構成の間で決定するために、単純なブールフラグを使用しますが、それは動作します。

関連する問題