2016-07-05 6 views
0

私はhibernateを使用してpostgresqlテーブルスキーマを生成しています。その結果hibernateによって生成されたすべてのテーブル名を読み取るには?

@Entity 
public class MyEntity { 
    @Id 
    private long id; 

    private String name; 
    private int age; 

    @Column(name = "testdate") 
    private Date thedate; 
} 

を私が手:

CREATE TABLE ... 

テーブルのフィールドはすべて、どんなにフィールドの順で、アルファベット順に作成されません@Entityです。

lateronフィールドを追加すると、通常はデータベースの余分な列として追加され、間にアルファベット順では挿入されません。

質問:生成されたすべてのテーブル名を、挿入順にデータベースから読み取るにはどうすればよいですか?また、生成されたスキーマ列名を使用していますか?それはまったく可能ですか?

サイドノート:私はスプリングでデータを維持していますCrudRepository

mSession.getSessionFactory().getAllClassMetadata(); 

を使用して

+0

'SessionFactory'から' ClassMetadata'オブジェクトを得ることができます:http://stackoverflow.com/questions/634342/get-the-table-name-from-the-model-in-hibernate。これはあなたが必要とするものですか? –

答えて

0

は、マップは、あなたが操作できるWICH返します。

2

org.hibernate.cfg.Configurationの場合はPersistentClassTableにアクセスできます。春に

public void printTables(Configuration configuration) throws MappingException { 
    Iterator classMappingIterator = configuration.getClassMappings(); 

    while(classMappingIterator.hasNext()) { 
    PersistentClass persistentClass = (PersistentClass)classMappingIterator.next(); 

    Table table = persistentClass.getTable(); 
    String tableName = table.getName(); 

    Iterator columnIterator = table.getColumnIterator(); 

    while(columnIterator.hasNext()){ 
     Column column = (Column) columnIterator.next(); 
     String columnName = column.getName(); 

     System.out.println(tableName + "." + columnName); 
    } 

    } 
} 

あなたはLocalSessionFactoryBeanを通じてConfigurationを得ることができます。

ApplicationContext appContext = ...; 

LocalSessionFactoryBean lsfb = (LocalSessionFactoryBean) appContext.getBean("&sessionFactory"); 

ファクトリーBeanを取得するには、接頭辞&を使用する必要があります。そうしないと、ファクトリが作成するBeanが取得されます。

ApplicationContextは、ApplicationContextAwareを実装することで、他の春の豆にすることができます。

関連する問題