2012-12-18 72 views
2

我試圖在Java EE 6應用程序中運行架構更新。在之前的Hibernate版本中,我設法創建了一個Ejb3Configuration,然後運行了SchemaUpdate。差不多是這樣的:Hibernate中的程序架構更新4

Ejb3Configuration cfg = new Ejb3Configuration(); 
cfg.configure(PERSISTENCE_UNIT_NAME, null); 
cfg.setProperty("hibernate.hbm2ddl.auto", "update"); 
cfg.setProperty("hibernate.dialect", dialect.getClass().getName()); 
Collection<String> entityClassNames = getEntityClassNames(PERSISTENCE_UNIT_NAME); 
for (String className : entityClassNames) 
{ 
    cfg.addAnnotatedClass(Class.forName(className)); 
} 

EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 

new SchemaUpdate(cfg.getHibernateConfiguration()).execute(true, true); 

顯然,類Ejb3Config已被棄用,不支持。那麼使用hibernate 4做一個SchemaUpdate的正確方法是什麼?

+0

看來你有麻煩了。根據[HHH-2578](https://hibernate.onjira.com/browse/HHH-2578),「配置」正在被['MetadataSources']替代(http://docs.jboss.org/hibernate/ orm/4.1/javadocs/org/hibernate/metamodel/MetadataSources.html)和朋友。目前我沒有辦法看到使用它來提供「SchemaUpdate」。我懷疑[HHH-6445](https://hibernate.onjira.com/browse/HHH-6445)是解決此問題的問題,但尚未解決,並且一年未觸及。 –

回答

1

你說你正在使用EE 6.你是使用persistence.xml和所有標準的JPA?如果沒有,那麼這是一個錯誤,第一步是回去修復。使用persistence.xml,您可以在啓動時指定具有屬性的模式更新:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0"> 

    <persistence-unit name="..."> 
     <properties> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
     </properties> 
    </persistence-unit> 

</persistence> 

這樣適合嗎?或者你有手動做這件事的原因嗎?

+0

其實我想手動觸發該功能。原因很簡單。我們的應用程序應該能夠根據應用程序模型自動修改數據庫模式。當引入FK關係時,我們需要hibernate的SchemaUpdate機制來創建FK約束。我們不想處理這一點,因爲這是非常特別的數據庫供應商,並已通過休眠來處理。 –