Onde colocar os arquivos xml do Hibernate?

Pessoal,

Em que pacote/pasta devo colocar os arquivos de mapeamento xml do Hibernate?

Sds,

Vinicius

Coloque na raiz do projeto.

Certo, cara…

Eu preciso configurar o arquivo hibernate.cfg.xml, só que parece que ele não existe. É isso mesmo?
Por exemplo… Quando mexi com Struts, ele criava automaticamente os arquivos xml de configuração. O Hibernate não faz isso? Preciso escrever o xml de configuração do Hibernate do zero? E coloco ele na raiz tb?

Valeu pela resposta!

Abraço,

Vinicius

NAUM entendi direito sua duvida, mas vai aew um exemplo,este arquivo deve estar na raiz,daew e so mapear as suas classes aqui estou usando um dataSource do servidor mas vc pode definir os parametros de configuiracao com o banco aqui mesmo caso naum use um dataSource:[code]

<?xml version=“1.0” encoding=“UTF-8”?>
<!DOCTYPE hibernate-configuration PUBLIC “-//Hibernate/Hibernate Configuration DTD 3.0//EN”
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>
<hibernate-configuration>
<session-factory name=“MinhaSessao”>
<property name=“connection.datasource”>java:/PostgresDS</property>
<property name=“dialect”>org.hibernate.dialect.PostgreSQLDialect</property>
<property name=“show_sql”>true</property>
<property name=“hibernate.jdbc.batch_size”>5</property>
<property name=“hibernate.connection.isolation”>2</property>
<mapping class=“com.Lgweb.Tcc.Model.Cidade”/>
<mapping class=“com.Lgweb.Tcc.Model.Cliente”/>
<mapping class=“com.Lgweb.Tcc.Model.Condicaopagamento”/>
<mapping class=“com.Lgweb.Tcc.Model.Contaspagar”/>
<mapping class=“com.Lgweb.Tcc.Model.Contasreceber”/>
<mapping class=“com.Lgweb.Tcc.Model.DiascondicaoDias”/>
<mapping class=“com.Lgweb.Tcc.Model.Dias”/>
<mapping class=“com.Lgweb.Tcc.Model.Fornecedor”/>
<mapping class=“com.Lgweb.Tcc.Model.Numeracao”/>
<mapping class=“com.Lgweb.Tcc.Model.Pedido”/>
<mapping class=“com.Lgweb.Tcc.Model.Pedidocompra”/>
<mapping class=“com.Lgweb.Tcc.Model.Itenscompra”/>
<mapping class=“com.Lgweb.Tcc.Model.Itensvenda”/>
<mapping class=“com.Lgweb.Tcc.Model.Perfil”/>
<mapping class=“com.Lgweb.Tcc.Model.Pessoafisica”/>
<mapping class=“com.Lgweb.Tcc.Model.Pessoajuridica”/>
<mapping class=“com.Lgweb.Tcc.Model.Produto”/>
<mapping class=“com.Lgweb.Tcc.Model.Ramoatividade”/>
<mapping class=“com.Lgweb.Tcc.Model.Estado”/>
<mapping class=“com.Lgweb.Tcc.Model.Usuario”/>
<mapping class=“com.Lgweb.Tcc.Model.Formapagamento”/>
<mapping class=“com.Lgweb.Tcc.Model.ProdutoNumeracao”/>
</session-factory>
</hibernate-configuration>

[/code]

isso mesmo .

Na verdade o hibernate.cfg.xml deve estar na raiz do classpath (default), e nao na raiz do projeto. Ou seja, em uma aplicacao web, deve estar em WEB-INF/classes

Rafael

[quote=Rafael Steil]Na verdade o hibernate.cfg.xml deve estar na raiz do classpath (default), e nao na raiz do projeto. Ou seja, em uma aplicacao web, deve estar em WEB-INF/classes

Rafael[/quote]

ILSON mesmio. :lol:

Essa era exatamente a minha dúvida, pois quando crio um projeto usando Struts, a IDE já gera para mim todos os arquivos de configuração (xmls) do Struts na web-inf. Já com Struts, eu tenho que criar esse arquivo “na mão”. Mas tá tranquilo… com as dicas de vocês eu acho que dá pra me virar aqui.

Muito obrigado, pessoal.

Aproveitando o embalo…

Os outros XMLs (Pessoa.hbm.xml, Cliente.hbm.xml, etc) eu coloco em que pasta/pacote?

Sds,

Vinicius

Se voce for usar Java5+, utilize as annotations do Hibernate / JPA ao inves do XML nojento.

Rafael

Entendi, Rafael.

Na verdade, eu estou apenas estudando. O meu objetivo é ver as duas maneiras. Inclusive até baixei os Jars da Annotation, só que num primeiro momento, eu nao consegui usar.
Aí consegui um artigo bom sobre Hibernate usando XML, mas nesse artigo (e nem nas apostilas que tenho sobre Hibernate) não dá informações a respeito da organização/configuração dos arquivos do Hibernate. Portanto, eu ja tenho uma visão geral de como a coisa funciona, mas não sei onde colocar os XMLs. Não sei se pode ser dentro de um pacote do meu projeto ou se tem que ser em alguma pasta especifica. Estou fazendo um exemplo simples com XMLs e depois vou dar uma “ralada” usando annotations.

Você tem alguma dica de onde posso colocar esses “malditos” xmls?

Abraço, cara. E mais uma vez obrigado.

No classpath tambem, e ai no arquivo de configuracao voce especifica o path deles.

A melhor documentacao que voce vai encontrar eh a do proprio hibernate, no site do projeto.

Rafael

Eu coloquei o hibernate.cfg.xml dentro da pasta WEB-INF (juntamente com os outros xml do hibernate, do strtus, etc…) so que, ao executar o projeto, deu o seguinte erro:

[quote]log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
org.hibernate.HibernateException: /hibernate.cfg.xml not found
at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1087)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1111)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1098)
at br.com.techcenter.hibernate.utils.HibernateUtility.(HibernateUtility.java:21)
at br.com.techcenter.hibernate.utils.HibernateTest.main(HibernateTest.java:10)
Exception in thread “main” java.lang.NullPointerException
at br.com.techcenter.hibernate.utils.HibernateTest.main(HibernateTest.java:11)
Java Result: 1
[/quote]

Ele não está achando o arquivo. O que pode estar acontecendo?

[quote=vinny767]Aproveitando o embalo…

Os outros XMLs (Pessoa.hbm.xml, Cliente.hbm.xml, etc) eu coloco em que pasta/pacote?

Sds,

Vinicius[/quote]

Lendo o Java Persistence With Hibernate , Christian Bauer aconselha a colocar estes arquivos de mapeamento no mesmo pacote onde estao suas classes de dominio.

Sobre o seu problema de nao encontrar hibernate.cfg.xml verifica se ele se encontra neste WEB-INF/classes

Cara… Ele não estava.
Não estava porque no NetBeans, na Aba Project, não existe essa pasta.
Fiquei batendo cabeça aqui e ví que essa pasta existe apenas na Aba File.
Cliquei entao nela e achei lá a pasta Web-Inf/Classes e ele encontrou o XML!

Isso é falta de experiência… Aos poucos eu vou aprendendo essas coisas.
Valeu pela dica! Agora tá dando erro no meu Endereco.hbm.xml.

[quote]org.hibernate.MappingException: Error reading resource: Endereco.hbm.xml
[/quote]

Vou bater um pouco de cabeça aqui. Se alguem tiver uma dica, agradeco!

Pessoal,

Consegui configurar o meu hibernate.cfg.xml e aparentemente ele está funcionando e está no local certo.

Pois bem… Quando mando a minha aplicação executar, ocorre o seguinte erro:

[quote]log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
org.hibernate.MappingException: Error reading resource: Pessoa.hbm.xml
at org.hibernate.cfg.Configuration.addResource(Configuration.java:452)
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1263)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1235)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1217)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1184)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1112)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1098)
at br.com.techcenter.hibernate.utils.HibernateUtility.(HibernateUtility.java:21)
at br.com.techcenter.hibernate.utils.HibernateTest.main(HibernateTest.java:11)
Caused by: org.hibernate.MappingException: org.dom4j.DocumentException: Error on line 21 of document : The element type “property” must be terminated by the matching end-tag “”. Nested exception: The element type “property” must be terminated by the matching end-tag “”.
at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:408)
at org.hibernate.cfg.Configuration.addResource(Configuration.java:449)
… 8 more
Caused by: org.dom4j.DocumentException: Error on line 21 of document : The element type “property” must be terminated by the matching end-tag “”. Nested exception: The element type “property” must be terminated by the matching end-tag “”.
at org.dom4j.io.SAXReader.read(SAXReader.java:482)
at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:398)
… 9 more
[/quote]

Como podem ver, ocorre erro ao ler o Pessoa.hbm.xml. Vou colocar o arquivo aqui para vocês darem uma olhada.

[code]<?xml version="1.0" encoding="UTF-8"?>

[/code]

Alguem sabe o que pode estar acontecendo?

Vc esqueceu de fechar as tags <property>

property name=&quot;nome&quot;/&gt;  

Valeu, cara! Era isso mesmo!

Pois bem… Continuei o meu exemplo. Consegui gravar uma pessoa no banco de dados usando o Hibernate. Acontece que, na minha aplicação, tem uma classe Endereço também, com relacionamento 1-1 com pessoa.

A tabela Pessoa tem o ID_Pessoa pessoa (PK) e a tabela Endereco tem ID_Pessoa_Endereco (PK e FK, para garantir q uma pessoa terá somente 1 endereco)

Estou com uma dúvida no meu Endereco.hbm.xml. Aqui está o código:

[code]<?xml version="1.0" encoding="UTF-8"?>

pessoa1 [/code]

O erro é o seguinte:

[quote]log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Initializing c3p0 pool… com.mchange.v2.c3p0.PoolBackedDataSource@1aa9f99 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@e95a56 [ acquireIncrement -> 2, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, idleConnectionTestPeriod -> 3000, initialPoolSize -> 2, maxIdleTime -> 5000, maxPoolSize -> 10, maxStatements -> 10, maxStatementsPerConnection -> 0, minPoolSize -> 2, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@11563ff [ description -> null, driverClass -> null, factoryClassLocation -> null, jdbcUrl -> jdbc:mysql://localhost:3306/bdhibernate, properties -> {user=******, password=******} ] , preferredTestQuery -> null, propertyCycle -> 300, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, usesTraditionalReflectiveProxies -> false ] , factoryClassLocation -> null, numHelperThreads -> 3, poolOwnerIdentityToken -> 1aa9f99 ]
Exception in thread “main” org.hibernate.PropertyNotFoundException: Unable to resolve property [name=pessoa1] to corresponding index
[/quote]

Parece que é no “param” do XML. Eu não entendi muito bem o que esse param faz. Alguem pode dar uma olhada para mim?
Existe algum “guia” que explique o que cada item destes xml faz?

Valeu!

Vinicius

Pessoal estou com o mesmo problema: meu arquivo xml esta assim:

<?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="hibernate.Endereco">
            
		<!-- Identificador da classe -->
                <id name="id"
                    column="Pessoa_id">
                    <generator class="foreign">
                        <param name="property">pessoa</param>
                    </generator>
		</id>
                
                <!-- Propriedades da classe -->		
		<property name="bairro"/>
		<property name="cidade"/>
		<property name="complemento"/>
		<property name="estado"/>
		<property name="numero"/>
                <property name="rua"/>
                <property name="cep"/>
                
                <!-- Relacionamento da classe -->		
                <one-to-one
                        name="pessoa"
                        class="hibernate.Pessoa"
                        constrained="true"/>
        </class>
</hibernate-mapping>

e a mensagem de erro :

Estou executando em NetBeans, e não estou conseguindo intender o pq ele esta acusando essa mensagem: " field not found: id"