Iniciante - Problema com Hibernate

4 respostas
S

Estou iniciando com Hibernate e fiz o meu primeiro exemplo baseado no tutorial do Wellington Marinheiro http://www.livramento.yu.com.br/Hibernate.html, só que utilizando o HibernateSynchronizer para a criação dos arquivos de configuração.
Acontece que quando fui testar, recebi a seguinte mensagem de erro:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
org.hibernate.InvalidMappingException: Could not parse mapping document from resource br/com/datus/CodStatus.hbm.xml
	at org.hibernate.cfg.Configuration.addResource(Configuration.java:539)
	at org.hibernate.cfg.Configuration.addClass(Configuration.java:586)
	at br.com.datus.CodStatusDao.<init>(CodStatusDao.java:18)
	at br.com.datus.Test.main(Test.java:17)
Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from invalid mapping
	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:502)
	at org.hibernate.cfg.Configuration.addResource(Configuration.java:536)
	... 3 more
Caused by: org.xml.sax.SAXParseException: The content of element type "class" must match "(meta*,subselect?,cache?,synchronize*,comment?,tuplizer*,(id|composite-id),discriminator?,natural-id?,(version|timestamp)?,(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,((join*,subclass*)|joined-subclass*|union-subclass*),loader?,sql-insert?,sql-update?,sql-delete?,filter*,resultset*,(query|sql-query)*)".
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at org.dom4j.io.SAXReader.read(SAXReader.java:465)
	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:499)
	... 4 more

Abaixo tenho as listagens dos arquivos de configuração e das classes java:

hibernate.cfg.xml

&lt?xml version="1.0" encoding="utf-8"?&gt
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory name="social" >

		<!-- local connection properties -->
		<property name="hibernate.connection.url">jdbc:oracle:thin:@172.30.32.128:1521:monitora</property>
		<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
		<property name="hibernate.connection.username">social</property>
		<property name="hibernate.connection.password">fulano</property>
		<!-- property name="hibernate.connection.pool_size"></property -->

		<!-- dialect for Oracle 9 -->
        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>

        <property name="hibernate.show_sql">false</property>
        <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
    </session-factory>
</hibernate-configuration>

CodStatus.hbm.xml

&lt?xml version="1.0"?&gt
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="br.com.datus">
	<class name="CodStatus" table="COD_STATUS">
		<meta attribute="sync-DAO">false</meta>
		<property name="idCodStatus" column="ID_COD_STATUS" type="integer" not-null="true" length="22"/>
		<property name="nomeStatus" column="NOME_STATUS" type="string" not-null="true" length="32"/>
		<property name="siglaStatus" column="SIGLA_STATUS" type="string" not-null="true" length="1"/>
		<property name="enderecoIpCadastro" column="ENDERECO_IP_CADASTRO" type="integer" not-null="true" length="22"/>		
		<property name="enderecoIpUltimaAtualizacao" column="ENDERECO_IP_ULTIMA_ATUALIZACAO" type="integer" not-null="true" length="22"/>
	</class>	
</hibernate-mapping>

CodStatus.java

package br.com.datus;

import java.io.Serializable;

/**
 * @hibernate.class
 *  table="COD_STATUS"
 */
public class CodStatus implements Serializable {
		
	private static final long serialVersionUID = -3033743555726603002L;	
	private Integer idCodStatus;
	private String nomeStatus;
	private String siglaStatus;
	private Integer enderecoIpCadastro;
	private Integer enderecoIpUltimaAtualizacao;
	
	public CodStatus() {
		
	}
	
	
	/**
	 * Construtor
	 * 
	 * @param idCodStatus the ID_COD_STATUS value
	 * @param nomeStatus the NOME_STATUS value
	 * @param siglaStatus the SIGLA_STATUS value
	 * @param enderecoIpCadastro the ENDERECO_IP_CADASTRO value
	 * @param enderecoIpUltimaAtualizacao the ENDERECO_IP_ULTIMA_ATUALIZACAO value
	 */
	public CodStatus(Integer idCodStatus, String nomeStatus, String siglaStatus,
			         Integer enderecoIpCadastro, 
			         Integer enderecoIpUltimaAtualizacao) {
		
		this.setIdCodStatus(idCodStatus);
		this.setNomeStatus(nomeStatus);
		this.setSiglaStatus(siglaStatus);
		this.setEnderecoIpCadastro(enderecoIpCadastro);
		this.setEnderecoIpUltimaAtualizacao(enderecoIpUltimaAtualizacao);
		initialize();
	}


	protected void initialize() {
		
	}

	
	/**
	 * Retorna o valor associado a coluna ID_COD_STATUS
	 * 
	 * @return idCodSTatus the ID_COD_STATUS value
	 */
	public Integer getIdCodStatus() {
		return idCodStatus;
	}
	
	
	/**
	 * Define o valor relacionado a coluna ID_COD_STATUS
	 * 
	 * @param idCodStatus the ID_COD_STATUS value 
	 */
	public void setIdCodStatus(Integer idCodStatus) {
		this.idCodStatus = idCodStatus;
	}
	
	
	/**
	 * Retorna o valor associado a coluna NOME_STATUS
	 *  
	 * @return nomeStatus the NOME_STATUS value
	 */
	public String getNomeStatus() {
		return nomeStatus;
	}
	
	
	/**
	 * Define o valor associado a coluna NOME_STATUS
	 * 
	 * @param nomeStatus the NOME_STATUS value
	 */
	public void setNomeStatus(String nomeStatus) {
		this.nomeStatus = nomeStatus;
	}
	
	
	/**
	 * Retorna o valor associado a coluna SIGLA_STATUS
	 * 
	 * @return siglaStatus the SIGLA_STATUS value
	 */
	public String getSiglaStatus() {
		return siglaStatus;
	}
	
	
	/**
	 * Define o valor associado a coluna SIGLA_STATUS
	 * 
	 * @param siglaStatus é o valor de SIGLA_STATUS
	 */
	public void setSiglaStatus(String siglaStatus) {
		this.siglaStatus = siglaStatus;
	}
	
	
	/**
	 * Retorna o valor associado a coluna ENDERECO_IP_CADASTRO
	 * 
	 * @return enderecoIpCadastro the ENDERECO_IP_CADASTRO value
	 */
	public Integer getEnderecoIpCadastro() {
		return enderecoIpCadastro;
	}
	
	
	/**
	 * Define o valor associado a coluna ENDERECO_IP_CADASTRO
	 * 
	 * @param enderecoIpCadastro the ENDERECO_IP_CADASTRO value
	 */
	public void setEnderecoIpCadastro(Integer enderecoIpCadastro) {
		this.enderecoIpCadastro = enderecoIpCadastro; 
	}

	
	/**
	 * Retorna o valor associado a coluna ENDERECO_IP_ULTIMA_ATUALIZACAO
	 * 
	 * @return enderecoIpUltimaAtualizacao the ENDERECO_IP_ULTIMA_ATUALIZACAO value
	 */
	public Integer getEnderecoIpUltimaAtualizacao() {
		return enderecoIpUltimaAtualizacao;
	}
	
	
	/**
	 * Define o valor associado a coluna ENDERECO_IP_ULTIMA_ATUALIZACAO
	 * 
	 * @param enderecoIpUltimaAtualizacao the ENDERECO_IP_ULTIMA_ATUALIZACAO value
	 */
	public void setEnderecoIpUltimaAtualizacao(Integer enderecoIpUltimaAtualizacao) {
		this.enderecoIpUltimaAtualizacao = enderecoIpUltimaAtualizacao; 
	}
}

CodStatusDao.java

package br.com.datus;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class CodStatusDao {
	
	private SessionFactory factory;

	/**
	 * Construtor
	 * 
	 * @throws Exception
	 */
	public CodStatusDao() throws Exception {
		
		factory = new Configuration().addClass(CodStatus.class).buildSessionFactory();		
	}
	
	
	/**
	 * Inserção de dados na tabela COD_STATUS
	 * 
	 * @param cStatus the CodStatus Object
	 * @throws Exception
	 */
	public void CodStatusInsere(CodStatus cStatus) throws Exception {
		
		Session sessionInsert = factory.openSession();
		sessionInsert.save(cStatus);
		sessionInsert.flush();
		sessionInsert.close();
	}
	
	
	/**
	 * Atualização de dados na tabela COD_STATUS
	 * 
	 * @param cStatus the CodStatus Object
	 * @throws Exception
	 */
	public void CodStatusAltera(CodStatus cStatus) throws Exception {
		
		Session sessionUpdate = factory.openSession();
		sessionUpdate.update(cStatus);
		sessionUpdate.flush();
		sessionUpdate.close();		
	}
	
	/**
	 * Deleção de dados na tabela COD_STATUS
	 * 
	 * @param cStatus the CodStatus Object
	 * @throws Exception
	 */
	public void CodStatusExclui(CodStatus cStatus) throws Exception {
		
		Session sessionDelete = factory.openSession();
		sessionDelete.delete(cStatus);
		sessionDelete.flush();
		sessionDelete.close();
	}
}

Teste.java

package br.com.datus;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		try {			
			Integer idCodStatus = 1;
			String nomeStatus = "Ativo";
			String siglaStatus = "A";
			Integer enderecoIpCadastro = 12345;
			Integer enderecoIpUltimaAtualizacao = 12345;
			
			CodStatusDao dao = new CodStatusDao();
			CodStatus cStatus = new CodStatus(idCodStatus, nomeStatus, siglaStatus, enderecoIpCadastro, enderecoIpUltimaAtualizacao);
			dao.CodStatusInsere(cStatus);
			System.out.println("Registro inserido com sucesso!!!");
			
		}
		catch (Exception e) {
			e.printStackTrace();			
		}

	}

}

Alguma sugestão do que eu estou fazendo errado?

Obrigado a todos.

4 Respostas

L

Opa!

Cara, eu dei uma olhada mas realmente não sei como
resolver esse seu problema :oops:. Mas tenho uma dica:

Já que você está começando com Hibernate, dê uma olhada
na parte de Hibernate-Annotations, pois com ele você faz
todo o Mapeamento dentro de sua classe java e se poupa
de ter de escrever todos esses XMLs.

[]s

S

ok…vou dar uma olhada.
Obrigado pela ajuda.

G

opa,

aqui, no seu arquivo Hibernate.cfg.xml vc tem que passar os arquivos xml que serao mapeados usando a tag

veja a estrutura:










true




faz desse jeito

L

Tive um problema com esse tutorial também.
Tentei executar e apareceu isso:

Exception in thread “main” java.lang.NoClassDefFoundError: org/dom4j/DocumentException

at  CodStatusDao( CodStatusDao.java :17)

at Teste.main(Teste.java:13)

Alguém sabe qual o problema ?

Criado 22 de junho de 2007
Ultima resposta 24 de jun. de 2007
Respostas 4
Participantes 4