[RESOLVIDO] Hibernate 4.1.10: mapeamento somente por anotações?

8 respostas
A

Pessoal, criei uma aplicação via console para aprendizado do Hibernate versão 4.1.10
tive problemas iniciais por causa da maioria dos tutoriais serem de versões anteriores e na versão 4.0 algumas classes e métodos estão depreciados.

Quiz iniciar com o mapeamento com hbm.xml só que ao executar estava recebendo uma exceção de “Entidade Desconhecida” depois de fazer várias alterações nos arquivos de configuração e classes sem sucesso, partir para mapear a classe entidade por anotação e a aplicação foi executada com sucesso.

Fiquei com uma dúvida:Será que a partir da versão 4.0 o Hibernate só faz mapeamento por anotações?

8 Respostas

R

Segundo a documentação da versão 4.x, ainda é possivel usar xml sim: http://docs.jboss.org/hibernate/orm/4.1/quickstart/en-US/html/ch02.html#hibernate-gsg-tutorial-basic-config

Outra dica, leia a documentação, nela você vai encontrar exemplos de como fazer as coisas.

J

Eles não seriam loucos em deixar só opção de fazer gambiarra nas entidades. Verifica se não falta configurar os resources no hibernate.cfg.xml.

A

Resources?
vejam como estão os arquivos xml´s:

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <mapping class="br.com.hibernate.modelo.produto.Produto"></mapping>
        <mapping class="br.com.hibernate.modelo.fornecedor.Fornecedor"></mapping>
     </session-factory>
</hibernate-configuration>

Produto.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
 <hibernate-mapping>
 	<class name="br.com.hibernate.modelo.produto.Produto" table="produto">
 		<id name="codigo">
 			<generator class="native"></generator>
 		</id>
 		<property name="nome"></property>
 		<property name="preco"></property>
 	</class> 
 </hibernate-mapping>

Algum erro?

J

Os arquivos de mapeamento (HBM).

No config:

Ou programaticamente:

SessionFactory sessionFactory = new Configuration() .addResource("xxx/xxx/Produto.hbm.xml") .buildSessionFactory();

No Hibernate do .NET tem uma forma que pega todos os mapeamentos de um “assembly” definido, no Java nunca usei algo similar para pacote, mas dá uma pesquisada.

A

Valeu javaflex, era isso mesmo! nas vídeo aulas que estava assistindo e em outros tutoriais não tinha este atributo “resource”! é bom porque abre a mente e entende melhor o assunto:

A classe HibernateUtil pega as configurações do hibernate.cfg.xml e cria uma Session, que é solicitada pelo DAO, enquanto hibernate.cfg.xml pega os mapeamentos das Entidades através do hbm.xml

A

Usando mapeamento hbm.xml ???
Não acha seria melhor fazer as anotações na classe?

J

adriano.braga83:
Usando mapeamento hbm.xml ???
Não acha seria melhor fazer as anotações na classe?

Já parou para pensar que isso é gambiarra? É fato que é muito adotado pela comunidade e é mais produtivo, mas é gambiarra e confuso de “enxergar” as coisas depois de muito tempo. Por XML é chato? Demais, mas não tem outra forma além dessa sem esculhambar as entidades. NHibernate (.NET) e Mentabean (Java) a coisa é limpa por exemplo, mapeamento programático separado da entidade. Infelizmente Hibernate para Java ainda não tem isso, e eu não entendo como o melhor ORM do mercado para a maior plataforma de desenvolvimento ainda não tem isso. Era só “copiar/adaptar” do NHibernate, da mesma forma que o NHibernate foi todo “copiado/adaptado”.

S

Alexsandro Lopes:
Pessoal, criei uma aplicação via console para aprendizado do Hibernate versão 4.1.10
tive problemas iniciais por causa da maioria dos tutoriais serem de versões anteriores e na versão 4.0 algumas classes e métodos estão depreciados.

Quiz iniciar com o mapeamento com hbm.xml só que ao executar estava recebendo uma exceção de “Entidade Desconhecida” depois de fazer várias alterações nos arquivos de configuração e classes sem sucesso, partir para mapear a classe entidade por anotação e a aplicação foi executada com sucesso.

Fiquei com uma dúvida:Será que a partir da versão 4.0 o Hibernate só faz mapeamento por anotações?


Gostaria de saber como voce fez isto, estou iniciando em hibernate, e não imagino como voce faria isto caso possa demonstra ficaria agradecido

Criado 2 de março de 2013
Ultima resposta 6 de out. de 2014
Respostas 8
Participantes 5