Column em HIbernate

Como recupero o nome das colunas de uma tabela mapeada no Hibernate ?

Estou conseguindo acessar as propriedades mas não consiguo acessar o nome das colunas. Estou precisando fazer isso para integrar o JasperReports com o Hibernate.

Companheiro, você não vai conseguir fazer isso com o Hibernate.

Os nomes das propriedades dos seus objetos não é igual ao nome das colulas não?

Hibernate 2.x 90% de certeza que não tem como (google também acha que não). Você pode:
a. pegar o objeto Connection, criar um ResultSet e então um ResultSetMetaData.
b. Parsear o arquivo de mapeamento.

No 3.x não sei.

Se você tiver coragem de ir mexer lá dentro, pega o objeto ClassMetadata da sua classe lá na SessionFactory:

http://hibernate.org/hib_docs/api/net/sf/hibernate/metadata/ClassMetadata.html

Boa sorte!

Não, minhas colunas são tipo SIS_COD_SISTEMA e os atributos são sisCodSistema :’(, quase encontrei um jeito aqui:

EntityPersister ent = (EntityPersister) ( (SessionFactoryImpl) HibernateUtil.currentSession().getSessionFactory() ).getPersister( perClass );
ent.getPropertyColumnNames( i );

mas essa é uma maneria totalmente podre de fazer isso dar certo :confused:

Fala sério em todos os anos de experiência de vcs com Hibernate nunca precisaram saber o nome das colunas ? :smiley:

Toda essa complicação por causa dessa chamada

HibernateQueryResultDataSource ds = new HibernateQueryResultDataSource( dao.getAll() );
JasperFillManager.fillReportToFile(X, Y, ds);

essa classe HibernateQueryResultDataSource precisa do nome de todas as colunas.

Maurício acho q vou ter q fazer isso mesmo.

Nops, sempre uso o mesmo nome das propriedades pra os nomes das colunas 8)

Não porque não coloco acentos e cedilha nos nomes das colunas @.@

pow não levem a sério esse comentário, já estou ficando puto com o Hibernate, provavelmente seria esse método EntityPersister.getActualPropertyColumnNames() mas ele é protected e nenhuma classe extende EntityPersister :confused:

Usa jdbc :slight_smile:

Tem essas duas maneiras que pra falar a verdade eu nunca usei mas vale dar uma fuçada porque parece ser um caminho pra fazer o que vc quer

			PersistentClass pedido = conf.getClassMapping(Pedido.class);
			Iterator it = pedido.getPropertyIterator();

Tente esse tambem

ClassMetadata metaData = sessionFactory.getClassMetadata(Pedido.class);
String[] propName = metaData.getPropertyNames();
String[] propValue = metaData.getProperyValues(new Pedido());

É isso ai da uma boa fuçada principalmente na primeira alternativa

Rafael o problema é justamente esse, não consiguo acessar o nome das colunas só os nome das propriedeades.

A única alternativa que estou vendo é para cada coluna que vou usar no jasperReports mudar o nome dela p/ o nome do atributo utilizado no Hibernate.

Então como eu te falei eu nunca precisei usar isso mas em um teste no eclipse com a primeira alternativa que eu te passei, eu peguei um Property desse Iterator e no Debug do Eclipse eu dei um inspect nele e la estava o nome da coluna, desde que esta tenha sido mapeada se não o valor era Null indicando que a coluna tem o mesmo nome da propriedade.

Tente fazer isso e olhe no inspect todas os valores de um Property

Pera… se o nome da coluna eh, sei la, FRU_ABACAXI_BATATA e a propriedade eh fruAbacaxiBatata, nao eh mais facil escrever um trequinho que formata como Fru Abacaxi Batata pra apresentar no relatorio?

Voce tem absoluta certeza que vc quer um relatorio cheio de nomes de colunas do banco de dados nele? :?

achei uma solução aqui:

Configuration cfg = HibernateUtil.getConfiguration();
PersistentClass userMapping =
cfg.getClassMapping(SistemaTO.class);

Column column1 = userMapping.getTable().getColumn(1);
String name = column1.getName();

o único “problema” é que não queria guardar uma instância de configuration na classe HibernateUtil, e sim acessar o configuration direto do sessionFactory, algo do tipo HibernateUtil.getSession().getSessionFactory().getConfiguration() hehehehe mas isso é só detalhe, do jeito lá funciona.