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
<?xml version="1.0" encoding="utf-8"?>
<!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
<?xml version="1.0"?>
<!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.