2013-10-17 11 views
5

Ich verwende Criteria Klasse überwintern, um alle Datensätze der Tabelle zu erhalten:Get Tabellenspaltennamen in Hibernate

Criteria criteria = session.createCriteria(AppTaskConfig.class) 

würde Ich mag auch Spaltennamen bekommen, wie ich Ergebnis in das JSON-Format eingestellt konvertieren müssen.

+0

Kann hier verweisen http://StackOverflow.com/q/2023700/366964 könnte helfen. –

Antwort

0

Was sind Spaltennamen der Entität? Die Entität könnte einige Spalten der Tabelle verwenden und keine Felder für andere haben.

Entität könnte eine andere Entity-Klasse erweitern, sodass Felder der Entity-Klasse durch Spalten aus verschiedenen Tabellen dargestellt werden.

Sie können eine native SQL-Abfrage ausführen und Tabellenspalten anzeigen.

13

Um die column names zu erhalten, müssen Sie zuerst die properties des Unternehmens org.hibernate.metadata.ClassMetadata mit finden:

ClassMetadata classMetadata = sessionFactory.getClassMetadata(AppTaskConfig.class); 
String[] propertyNames = classMetadata.getPropertyNames(); 

wo propertyNames ist ein Array von Strings, die Eigenschaftsnamen von AppTaskConfig darstellt.

Jetzt mit Hibernate org.hibernate.cfg.Configuration Objekt Sie die Spaltennamen der properties finden können: richtig

for (String property : propertyNames) { 
    Configuration configuration = sessionFactoryBean.getConfiguration(); 
    PersistentClass persistentClass = configuration 
        .getClassMapping(Details.class.getName()); 
    String columnName = ((Column) persistentClass.getProperty(property) 
        .getColumnIterator().next()).getName(); 
} 
+2

Was ist SessionFactoryBean hier? Ich denke nicht, dass es SessionFactory ist. – instanceOfObject

+2

@instanceOfObject, überprüfen Sie bitte den Link https://developer.jboss.org/thread/189593?start=0&tstart=0 – Stony

+1

@ Saikai, während Sie diesem Ansatz folgen, erhalten wir nicht die primären Schlüsseldetails. Bitte geben Sie eine weitere Lösung an. –

0
String[] columnNames = getSessionFactory().getClassMetadata(Employee.class).getPropertyNames(); 

    org.hibernate.type.Type[] columnTypes = getSessionFactory().getClassMetadata(Employee.class).getPropertyTypes(); 

versuchen, dieses ist das Werk ...

0

Sie Reflection-API für den Zugriff verwenden können, um deklarierte JPA Annotationen eines Feldes/Getter wie Spalte o JoinColumn.

import javax.persistence.Column; 
import javax.persistence.JoinColumn; 

// get declared field 
Field field = persistentClass.getDeclaredField("property"); 

// get declared method 
Method method = persistentClass.getMethod("get"+property.substring(0,1).toUpper()+property.substring(1))); 

// access to declared annotations or field or method to find Column or JoinColumn