XML + Hibernate

25 respostas
AlencarCanton

E ae galera,beleza?

Segui o exemplo de hibernate de uma apostila caelum,mas to tento problemas ao tentar inserir um objeto no banco.
Segue a minha classe modelo do objeto:

@Entity
public class EstoqueSucata {
    @Id@GeneratedValue
    private int Ah;
    private int Quantidade;

    public int getAh() {
        return Ah;
    }

    public void setAh(int Ah) {
        this.Ah = Ah;
    }

    public int getQuantidade() {
        return Quantidade;
    }

    public void setQuantidade(int Quantidade) {
        this.Quantidade = Quantidade;
    }

    
        
}

Minha classe principal:

public static void main(String[] args) {
        // TODO code application logic here
       AnnotationConfiguration configuration = new AnnotationConfiguration();
       configuration.configure();
       
       SessionFactory factory;
       factory = configuration.buildSessionFactory();
       Session session = factory.openSession();
       
       EstoqueSucata estoqueTeste = new EstoqueSucata();
       
       estoqueTeste.setAh(100);
       estoqueTeste.setQuantidade(50);
       
       Transaction tx = session.beginTransaction();
       session.save(estoqueTeste);
       tx.commit();
       session.close();
    }

}

esse é o arquivo XML hibernate.cfg.xml:

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

<!--
    Document   : hibernate.cfg.xml
    Created on : 1 de Setembro de 2011, 12:13
    Author     : Alencar
    Description:
        Purpose of the document follows.
-->

<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password"></property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost/paulobaterias</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		<property name="hibernate.hbm22ddl.auto">update</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
                <mapping class="Modelos.EstoqueSucata.class" />
	</session-factory>
</hibernate-configuration>

e esse é o erro gerado ao executar o projeto:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" org.hibernate.MappingException: invalid configuration at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1493) at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:990) at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:69) at org.hibernate.cfg.Configuration.configure(Configuration.java:1434) at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:972) at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:69) at org.hibernate.cfg.Configuration.configure(Configuration.java:1420) at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:966) at Principal.Main.main(Main.java:27) Caused by: org.xml.sax.SAXParseException: Document is invalid: no grammar found. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:250) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3103) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at org.dom4j.io.SAXReader.read(SAXReader.java:465) at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1490)

Parece que o erro é relacionado ao arquivo xml,o que está errado?
Outra dúvida como gerar o banco de dados a partir das classes de entidade com anotações?

vlw!

25 Respostas

dtxk

eu acho q essa linha esta errada:

seria:

AlencarCanton

dtxk,

fiz isso,

continua gerando erro,olha:

<blockquote>log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).

log4j:WARN Please initialize the log4j system properly.

Exception in thread main org.hibernate.MappingException: invalid configuration

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1493)

at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:990)

at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:69)

at org.hibernate.cfg.Configuration.configure(Configuration.java:1434)

at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:972)

at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:69)

at org.hibernate.cfg.Configuration.configure(Configuration.java:1420)

at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:966)

at Principal.Main.main(Main.java:27)

Caused by: org.xml.sax.SAXParseException: Document is invalid: no grammar found.

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:250)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3103)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)

at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)

at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)

at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)

at org.dom4j.io.SAXReader.read(SAXReader.java:465)

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1490)

 8 more</blockquote>
dtxk

AlencarCanton:
dtxk,

fiz isso,

continua gerando erro,olha:

<blockquote>log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).

log4j:WARN Please initialize the log4j system properly.

Exception in thread main org.hibernate.MappingException: invalid configuration

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1493)

at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:990)

at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:69)

at org.hibernate.cfg.Configuration.configure(Configuration.java:1434)

at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:972)

at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:69)

at org.hibernate.cfg.Configuration.configure(Configuration.java:1420)

at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:966)

at Principal.Main.main(Main.java:27)

Caused by: org.xml.sax.SAXParseException: Document is invalid: no grammar found.

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:250)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3103)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)

at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)

at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)

at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)

at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)

at org.dom4j.io.SAXReader.read(SAXReader.java:465)

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1490)

 8 more</blockquote></blockquote>

verifica o arquivo XML que ele esta dizendo q esta com pau.

quando da esse erro:

é defeito do XML que está incorreto. eu olhei por cima não encontrei nada.

AlencarCanton

entao,
eu tb saquei q era no XML,mas ja olhei em vários aqui,parece q meu código ta certo =…
vc sabe como gerar as tabelas no banco a partir de classe de entidades com anotações dtxsk?
vlww

dtxk

experimenta colocar essas duas linhas:

<?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">
no começo do arquivo.

E depois posta denovo o seu arquivo de configuração do Hibernate.

AlencarCanton

fiz isso,
mudou o erro,n consigo identificar o que é,mas o erro parece continuar no XML.

<blockquote>Exception in thread main org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1500)

at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:990)

at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:69)

at org.hibernate.cfg.Configuration.configure(Configuration.java:1434)

at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:972)

at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:69)

at org.hibernate.cfg.Configuration.configure(Configuration.java:1420)

at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:966)

at Principal.Main.main(Main.java:27)

Caused by: org.dom4j.DocumentException: Error on line 2 of document  : The processing instruction target matching [xX][mM][lL] is not allowed. Nested exception: The processing instruction target matching [xX][mM][lL] is not allowed.

at org.dom4j.io.SAXReader.read(SAXReader.java:482)

at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1490)

 8 more</blockquote>
dtxk

Outra coisa, configura direto esse Bean:

@Table(name = "tabela")
    @Entity
    public class EstoqueSucata {  
        @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
       @Column(name = "nomeColuna", unique = true, nullable = false)  
        private int Ah;  
        private int Quantidade;  
      
        public int getAh() {  
            return Ah;  
        }  
      
        public void setAh(int Ah) {  
            this.Ah = Ah;  
        }  
      
        public int getQuantidade() {  
            return Quantidade;  
        }  
      
        public void setQuantidade(int Quantidade) {  
            this.Quantidade = Quantidade;  
        }  
      
          
              
    }

A configuração que eu fiz foi para SQL SERVER. Qual banco vc esta usando ai?

AlencarCanton

entao cara,anotei a bean da forma como vc me passou,
mas continua dando o mesmo erro.
Sim,estou usando SQL SERVER.
vlw!

dtxk

AlencarCanton:
entao cara,anotei a bean da forma como vc me passou,
mas continua dando o mesmo erro.
Sim,estou usando SQL SERVER.
vlw!

Então o erro esta no XML mas não estou vendo erro nele. Da uma procurada no Google:
http://www.google.com.br/#sclient=psy&hl=pt-BR&site=&source=hp&q=Exception+in+thread+%22main%22+org.hibernate.HibernateException%3A+Could+not+parse+configuration%3A+%2Fhibernate.cfg.xml+&pbx=1&oq=Exception+in+thread+%22main%22+org.hibernate.HibernateException:+Could+not+parse+configuration%3A+%2Fhibernate.cfg.xml+&aq=f&aqi=&aql=&gs_sm=e&gs_upl=490l490l0l940l1l0l0l0l0l0l0l0ll0l0&bav=on.2,or.r_gc.r_pw.&fp=8b92442f7d38d773&biw=1360&bih=675&safe=active

Que tem outras pessoas com o mesmo erro q voce.

Qualquer coisa posta ai.

Abraços

AlencarCanton

ja tinha olhado no google,mas nada me resolveu…
vo continuar testando,qualquer coisa eu posto aqui,vlw pela ajuda aí dxkt!
se alguem aí ver o erro,posta pra mim,por favor hehe
vlw!

romarcio

Substitui a 2ª linha do xml por essa: &lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;

dtxk

romarcio:
Substitui a 2ª linha do xml por essa: &lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;

Ja tinha falado isso romarcio o erro esta ainda no XML

AlencarCanton

substituí e continuo com o mesmo erro =\

romarcio

dtxk:
romarcio:
Substitui a 2ª linha do xml por essa: &lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;

Ja tinha falado isso romarcio o erro esta ainda no XML

É que a que você passou era diferente da minha nessa parte: DTD 3.0//EN

romarcio

Posta seu xml novamente, como está nesse momento em que está gerando esse ultimo erro.

dtxk

+1

AlencarCanton
<?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">  

<!--
    Document   : hibernate.cfg.xml
    Created on : 1 de Setembro de 2011, 12:13
    Author     : Alencar
    Description:
        Purpose of the document follows.
-->

<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password"></property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost/paulobaterias</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		<property name="hibernate.hbm22ddl.auto">update</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>
                <mapping class="Modelos.EstoqueSucata" />
	</session-factory>
</hibernate-configuration>
romarcio

O problema não é o arquivo, é outra coisa.
Visualmente o arquivo não tem problema. Então copiei ele e mudei apenas o nome do banco e a classe e testei aqui e funcionou blz.

AlencarCanton

a tabela já tem q estar criada no banco?

essa eh minha classe principal:

public static void main(String[] args) {
        // TODO code application logic here
       AnnotationConfiguration configuration = new AnnotationConfiguration();
       configuration.configure();
       
       SessionFactory factory;
       factory = configuration.buildSessionFactory();
       Session session = factory.openSession();
       
       EstoqueSucata estoqueTeste = new EstoqueSucata();
       
       estoqueTeste.setAh(100);
       estoqueTeste.setQuantidade(50);
       
       Transaction tx = session.beginTransaction();
       session.save(estoqueTeste);
       tx.commit();
       session.close();
    }

}

pode ser ela?

dtxk
AlencarCanton:
a tabela já tem q estar criada no banco?

essa eh minha classe principal:

public static void main(String[] args) {
        // TODO code application logic here
       AnnotationConfiguration configuration = new AnnotationConfiguration();
       configuration.configure();
       
       SessionFactory factory;
       factory = configuration.buildSessionFactory();
       Session session = factory.openSession();
       
       EstoqueSucata estoqueTeste = new EstoqueSucata();
       
       estoqueTeste.setAh(100);
       estoqueTeste.setQuantidade(50);
       
       Transaction tx = session.beginTransaction();
       session.save(estoqueTeste);
       tx.commit();
       session.close();
    }

}

pode ser ela?

sim a tabela tem que estar no banco. Cria a tabela e posta ai denovo.

AlencarCanton

criei a tabela e teste,mas recebi o msm erro…
mas olha só,se eu to usando anotações nas classes modelo e no XML eu uso “<mapping class=” era pro hibernate gerar a tabela no banco,não assim que funciona?
vlw!

romarcio

Ele vai criar a tabela se o banco de dados estiver criado. Mas no seu caso ele não criou porque da o tal erro, então ele não chega a executar a criação da tabela.

romarcio

Faz um teste, ao invés de usar o arquivo xml, criar as configurações de maneira programática, só para ver se o erro persiste.

AlencarCanton

resolvi…
vc acreditam que o problema era pq tinha um espaço na primeira linha antes do primeiro “<” …
só um espaço…

Funcionou com a tabela criada no banco,quando eu executo a classe principal sem ter criado a tabela aparece o seguinte erro:

<blockquote>Hibernate:

insert

into

EstoqueSucata

(Quantidade, Ah)

values

(?, ?)

Exception in thread main org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)

at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)

at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)

at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)

at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)

at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)

at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)

at Principal.Main.main(Main.java:39)

Caused by: java.sql.BatchUpdateException: Table paulobaterias.estoquesucata doesnt exist

at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1669)

at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1085)

at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)

at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)

 8 more

Java Result: 1</blockquote>

vlw!

romarcio

vc acreditam que o problema era pq tinha um espaço na primeira linha antes do primeiro "<" …
só um espaço…

Bom, então você não colou no post exatamente o mesmo XML que estava usando, por que o que postou não tem erro algum.

Troca no arquivo xml &lt;property name="hibernate.hbm22ddl.auto"&gt;update&lt;/property&gt; por &lt;property name="hibernate.hbm22ddl.auto"&gt;create&lt;/property&gt;
Deve funcionar assim, mas da outra maneira também deveria ter funcionado.
Só que se usar “create”, depois de criar a 1ª vez, vai lá e troca por “update” senão toda vez que executar ele pode recriar as tabelas, apagando os dados existentes.

Criado 6 de setembro de 2011
Ultima resposta 8 de set. de 2011
Respostas 25
Participantes 3