2016-03-14 55 views
3

我最近更新了Hibernate從5.0到5.1和SchemaExport API已更改。遷移文檔提到了此更改,但不解釋如何使用較新的API。此外,我還沒有找到任何其他支持樣本來解決這一重大變化。如何在將Hibernate升級到5.1.0後導出模式?

+0

您可以比較的兩個標籤中的代碼,這裏是5.1,只需選擇你想要的標籤,看看有什麼變化做:https://開頭github.com/hibernate/hibernate-orm/blob/5.1.0/hibernate-core/src/main/java/org/hibernate/tool/hbm2ddl/SchemaExport.java – Berger

+0

IMO我會分享你有的相關代碼,然後提出需要改變的問題以使其與Hibernate 5.1 API兼容。這將最大限度地發揮可能遇到同樣問題的其他人的有用性。這是非常無益的'遷移指南':http://hibernate.org/orm/documentation/5.1/migration/ – Gimby

回答

2

我偶然發現了這個代碼的diff,幫助我解決了API中的差異:https://gitlab.nuiton.org/nuiton/topia/commit/0c57f073ad879a981e9fa3315f0e04669a57858b

這裏是我的代碼,其中出口模式爲標有@Entity標註到輸出窗口的任何類。

static void getDDL(String packageName, String propertiesFile) throws IOException { 

    MetadataSources metadata = new MetadataSources(
     new StandardServiceRegistryBuilder() 
      .loadProperties(propertiesFile) 
      .build()); 

    new Reflections(packageName) 
     .getTypesAnnotatedWith(Entity.class) 
     .forEach(metadata::addAnnotatedClass); 

    //STDOUT will export to output window, but other `TargetType` values are available to export to file or to the db. 
    EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.STDOUT); 

    SchemaExport export = new SchemaExport(); 

    export.setDelimiter(";"); 
    export.setFormat(true); 

    export.createOnly(targetTypes, metadata.buildMetadata()); 
} 
+0

什麼是思考?不編譯。 – powder366

+0

@ powder366這是從包'org.reflections' – leojh

0

leojh答案有效並創建了腳本。但掛起並永不停止執行?看起來第一次出口,然後導入。只想要導出...爲什麼Java不退出?

輸出:

INFO Dialect:Using dialect: org.hibernate.dialect.MySQL5Dialect 
INFO SchemaExport:Running hbm2ddl schema export 
INFO SchemaCreatorImpl:Executing import script 'org.hiber[email protected]1bd39d‌​3c' 

類:

String file="export.sql"; 

    try { 
     MetadataSources metadata = new MetadataSources(new StandardServiceRegistryBuilder() 
       .loadProperties(new File(DatabaseCreator.class.getClassLoader().getResource("hibernate.cfg.xml").getFile())) 
       .build()); 

     new Reflections("ch.abc.mapping").getTypesAnnotatedWith(Entity.class).forEach(metadata::addAnnotatedClass); 

     EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.SCRIPT); 

     new File(file).delete(); 

     SchemaExport export = new SchemaExport(); 
     export.setDelimiter(";"); 
     export.setFormat(true); 
     export.setOutputFile(file); 
     export.execute(targetTypes, SchemaExport.Action.CREATE, metadata.buildMetadata()); 
     System.exit(0); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

我不知道。這可能是因爲無數的事情。對我來說,我在一個控制檯應用程序中運行它,它存在很好。 – leojh

+0

好笑。無論哪種方式對我來說,它掛在導入如上所示。儘管生成文件正確。我從IntelliJ內運行。 – powder366

+0

看看它掛在哪條線上,看看爲什麼。也許你沒有處理資源或連接。 – leojh

相關問題