2013-10-17 16 views
5

Sto usando hibernate Criteria classe per ottenere tutti i record della tabella:ottenere i nomi di colonna della tabella in Hibernate

Criteria criteria = session.createCriteria(AppTaskConfig.class) 

Vorrei ottenere i nomi delle colonne anche come ho bisogno di set di risultati in formato JSON convertire.

+0

Può fare riferimento qui http://stackoverflow.com/q/2023700/366964 potrebbe aiutare. –

risposta

0

Quali sono i nomi di colonna dell'entità? L'entità potrebbe utilizzare alcune delle colonne della tabella e non disporre di campi per altri.

L'entità può estendere un'altra classe Entity in modo che i campi della classe Entity siano rappresentati da colonne di tabelle diverse.

È possibile eseguire query SQl nativa e visualizzare colonne di tabella.

13

Per ottenere column names, in primo luogo è necessario trovare il properties dell'entità utilizzando org.hibernate.metadata.ClassMetadata:

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

dove propertyNames è un array di stringhe che rappresentano i nomi delle proprietà di AppTaskConfig.

Ora usando Hibernate org.hibernate.cfg.Configuration oggetto è possibile trovare i nomi delle colonne del properties:

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

Che cos'è sessionFactoryBean qui? Non penso che sia sessionFactory. – instanceOfObject

+2

@instanceOfObject, per favore controlla il link https://developer.jboss.org/thread/189593?start=0&tstart=0 – Stony

+1

@ Saikai mentre segui questo approccio non riceviamo i dettagli della chiave primaria. Si prega di fornire un'altra soluzione. –

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

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

provare questo questo è il lavoro correttamente ...

0

È possibile utilizzare Reflection API per l'accesso ai annotazioni JPA dichiarate di un campo/getter come Column 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 
Problemi correlati