Hibernate e ANT, como faço para exportar schema

5 respostas
ivanmc

Estou tendo problemas com meu ANT para gerar o schema no banco de dados.

QUando roda o build, essa é a mensagem que recebo:

Buildfile: C:\java\eclipse3.02\workspace\ftu\build.xml

createtables:

[schemaexport] (cfg.Environment                     483 ) Hibernate 2.1.8

[schemaexport] (cfg.Environment                     517 ) loaded properties from resource hibernate.properties: {hibernate.connection.driver_class=org.gjt.mm.mysql.Driver, hibernate.cglib.use_reflection_optimizer=true, hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider, hibernate.cache.use_query_cache=true, hibernate.max_fetch_depth=1, hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect, hibernate.jdbc.use_streams_for_binary=true, hibernate.jdbc.batch_size=0, hibernate.query.substitutions=true 1, false 0, yes Y, no N, hibernate.proxool.pool_alias=pool1, hibernate.connection.username=root, hibernate.cache.region_prefix=hibernate.test, hibernate.connection.url=jdbc:mysql://localhost:3306/ftu, hibernate.connection.password=root, hibernate.jdbc.batch_versioned_data=true, hibernate.connection.pool_size=1}

[schemaexport] (cfg.Environment                     542 ) using <a href="http://java.io">java.io</a> streams to persist binary types

[schemaexport] (cfg.Environment                     543 ) using CGLIB reflection optimizer

[schemaexport] (cfg.Environment                     572 ) using JDK 1.4 java.sql.Timestamp handling

[schemaexport] (cfg.Configuration                   170 ) Mapping file: C:\java\eclipse3.02\workspace\ftu\WEB-INF\classes\br\edu\ftu\models\Email.hbm.xml

[schemaexport] (cfg.Configuration                   256 ) Could not compile the mapping document

[schemaexport] net.sf.hibernate.MappingException: persistent class [br.edu.ftu.models.Email] not found

[schemaexport] at net.sf.hibernate.cfg.Binder.bindClass(Binder.java:84)

[schemaexport] at net.sf.hibernate.cfg.Binder.bindRootClass(Binder.java:221)

[schemaexport] at net.sf.hibernate.cfg.Binder.bindRoot(Binder.java:1256)

[schemaexport] at net.sf.hibernate.cfg.Configuration.add(Configuration.java:253)

[schemaexport] at net.sf.hibernate.cfg.Configuration.addFile(Configuration.java:175)

[schemaexport] at net.sf.hibernate.tool.hbm2ddl.SchemaExportTask.getConfiguration(SchemaExportTask.java:195)

[schemaexport] at net.sf.hibernate.tool.hbm2ddl.SchemaExportTask.execute(SchemaExportTask.java:135)

[schemaexport] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)

[schemaexport] at org.apache.tools.ant.Task.perform(Task.java:364)

[schemaexport] at org.apache.tools.ant.Target.execute(Target.java:341)

[schemaexport] at org.apache.tools.ant.Target.performTasks(Target.java:369)

[schemaexport] at org.apache.tools.ant.Project.executeTarget(Project.java:1214)

[schemaexport] at org.apache.tools.ant.Project.executeTargets(Project.java:1062)

[schemaexport] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:383)

[schemaexport] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:136)

[schemaexport] Caused by: java.lang.ClassNotFoundException: br.edu.ftu.models.Email

[schemaexport] at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1149)

[schemaexport] at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1090)

[schemaexport] at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:960)

[schemaexport] at java.lang.ClassLoader.loadClass(Unknown Source)

[schemaexport] at java.lang.ClassLoader.loadClassInternal(Unknown Source)

[schemaexport] at java.lang.Class.forName0(Native Method)

[schemaexport] at java.lang.Class.forName(Unknown Source)

[schemaexport] at net.sf.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:102)

[schemaexport] at net.sf.hibernate.cfg.Binder.bindClass(Binder.java:81)

[schemaexport]  14 more

[schemaexport] (cfg.Configuration                   179 ) Could not configure datastore from file: C:\java\eclipse3.02\workspace\ftu\WEB-INF\classes\br\edu\ftu\models\Email.hbm.xml

[schemaexport] net.sf.hibernate.MappingException: persistent class [br.edu.ftu.models.Email] not found

[schemaexport] at net.sf.hibernate.cfg.Binder.bindClass(Binder.java:84)

[schemaexport] at net.sf.hibernate.cfg.Binder.bindRootClass(Binder.java:221)

[schemaexport] at net.sf.hibernate.cfg.Binder.bindRoot(Binder.java:1256)

[schemaexport] at net.sf.hibernate.cfg.Configuration.add(Configuration.java:253)

[schemaexport] at net.sf.hibernate.cfg.Configuration.addFile(Configuration.java:175)

[schemaexport] at net.sf.hibernate.tool.hbm2ddl.SchemaExportTask.getConfiguration(SchemaExportTask.java:195)

[schemaexport] at net.sf.hibernate.tool.hbm2ddl.SchemaExportTask.execute(SchemaExportTask.java:135)

[schemaexport] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)

[schemaexport] at org.apache.tools.ant.Task.perform(Task.java:364)

[schemaexport] at org.apache.tools.ant.Target.execute(Target.java:341)

[schemaexport] at org.apache.tools.ant.Target.performTasks(Target.java:369)

[schemaexport] at org.apache.tools.ant.Project.executeTarget(Project.java:1214)

[schemaexport] at org.apache.tools.ant.Project.executeTargets(Project.java:1062)

[schemaexport] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:383)

[schemaexport] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:136)

[schemaexport] Caused by: java.lang.ClassNotFoundException: br.edu.ftu.models.Email

[schemaexport] at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1149)

[schemaexport] at org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1090)

[schemaexport] at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:960)

[schemaexport] at java.lang.ClassLoader.loadClass(Unknown Source)

[schemaexport] at java.lang.ClassLoader.loadClassInternal(Unknown Source)

[schemaexport] at java.lang.Class.forName0(Native Method)

[schemaexport] at java.lang.Class.forName(Unknown Source)

[schemaexport] at net.sf.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:102)

[schemaexport] at net.sf.hibernate.cfg.Binder.bindClass(Binder.java:81)

[schemaexport]  14 more

BUILD FAILED: C:\java\eclipse3.02\workspace\ftu\build.xml:21: Schema text failed: net.sf.hibernate.MappingException: persistent class [br.edu.ftu.models.Email] not found

Total time: 2 seconds

Acontece que o Email.hbm.xml está no diretorio correto:
Este arquivo está assim:

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

<hibernate-mapping

<class
    name="br.edu.ftu.models.Email"
    table="email"
>

    <id
        name="id"
        column="id"
        type="long"
    >
        <generator class="sequence">
            <param name="sequence">id_email</param>
          <!--  
              To add non XDoclet generator parameters, create a file named 
              hibernate-generator-params-Email.xml 
              containing the additional parameters and place it in your merge dir. 
          --> 
        </generator>
    </id>

    <timestamp
        name="timestamp"
        column="TIMESTAMP"
    />

    <property
        name="ativo"
        type="java.lang.Integer"
        update="true"
        insert="true"
        column="ativo"
        not-null="true"
    />

    <property
        name="principal"
        type="java.lang.Integer"
        update="true"
        insert="true"
        column="principal"
        not-null="true"
    />

    <property
        name="provedor"
        type="string"
        update="true"
        insert="true"
        column="provedor"
        length="50"
        not-null="true"
    />

    <property
        name="conta"
        type="string"
        update="true"
        insert="true"
        column="conta"
        length="50"
        not-null="true"
    />

    <!--
        To add non XDoclet property mappings, create a file named
            hibernate-properties-Email.xml
        containing the additional properties and place it in your merge dir.
    -->

</class>

O build está assim:

























Quem puder, agradeço.

Ivan

5 Respostas

vivi_grieco
[schemaexport] net.sf.hibernate.MappingException: persistent class [br.edu.ftu.models.Email] not found

Ele não está encontrando a casse Email (ou melhor, o hbm.xml dela). Ela existe? Está nesse caminho mesmo?

ivanmc

tá sim, a classe existe e está no endereço indicado. Aqui vai ela.

/*

  • Created on 13/05/2005
  • Classe de email, representa uma tabela física por que
  • um usuário poderá ter vários e-mails
    */
    package br.edu.ftu.models;

import java.util.Date;

/**

  • @author Babajinan

  • O objetivo é poder tratar os métodos de email centralizadamente

  • @hibernate.class

  • table=email
    
    */
    
    public class Email {
    
    private long id;
    
    private String conta;
    
    private String provedor;
    
    private Integer ativo;
    
    private Integer principal;
    
    private Date timestamp;
    
    private User user;
    

    /**

    • @return Returns the id.
    • @hibernate.id
    • generator-class = “sequence”
    • column = “id”
    • @hibernate.generator-param
    • name=“sequence”
    • value=“id_email”
      /
      public long getId() {
      return id;
      }
      /
      *
    • @return Returns the ativo.
    • @hibernate.property
    • column=“ativo”
    • not-null=“true”
      /
      public Integer isAtivo() {
      return ativo;
      }
      /
      *
    • @return Returns the principal.
    • @return Returns the ativo.
    • @hibernate.property
    • column=“principal”
    • not-null=“true”
      /
      public Integer isPrincipal() {
      return principal;
      }
      /
      *
    • @return Returns the provedor.
    • @hibernate.property
    • column=“provedor”
    • not-null=“true”
    • type=“string”
    • length=“50”
      /
      public String getProvedor() {
      return provedor;
      }
      /
      *
    • @return Returns the conta de usuario.
    • @hibernate.property
    • column=“conta”
    • not-null=“true”
    • type=“string”
    • length=“50”
      /
      public String getConta() {
      return conta;
      }
      /
      *
    • @return Returns the timestamp.
    • @hibernate.timestamp
    • name=“timestamp”
    • column=“TIMESTAMP”
    • not-null=“false”
      /
      public Date getTimestamp() {
      return timestamp;
      }
      /
      *
    • @param ativo The ativo to set.
      */
    public void setAtivo(Integer ativo) {
    
    this.ativo = ativo;
    
    }
    
    /**
    
    • @param id The id to set.
      /
      public void setId(long id) {
      this.id = id;
      }
      /
      *
    • @param principal The principal to set.
      /
      public void setPrincipal(Integer principal) {
      this.principal = principal;
      }
      /
      *
    • @return Returns the usuario.
      /
      public User getUsuario() {
      return user;
      }
      /
      *
    • @param provedor The provedor to set.
      /
      public void setProvedor(String provedor) {
      this.provedor = provedor;
      }
      /
      *
    • @param usuario The usuario to set.
      /
      public void setConta(String conta) {
      this.conta = conta;
      }
      /
      *
    • @param usuario The usuario to set.
      /
      public void setUsuario(User user) {
      this.user = user;
      }
      /
      *
    • @param timestamp The timestamp to set.
      /
      public void setTimestamp(Date timestamp) {
      this.timestamp = timestamp;
      }
      /
      *
    • @param ponteiroDeArquivoXML
    • envia email para a conta de email
      */
      public void enviaEmail(String ponteiroDeArquivoXML){
      // pega configuração de sendmail em sendmail.xml
      // pega arquivo XML com mensagem
      // recolhe titulo da mensagem
      // recolhe corpo da mensagem
      // recolhe endereço para reply
      // monta mensagem
      // envia mensagem para [email removido]
      }
      }
plentz

Por favor, na próxima use as tags [ CODE ] Seu código aqui [ /CODE ]

vivi_grieco

Mostre o código do seu Email.hbm

ivanmc

[ CODE ]

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

<hibernate-mapping

<class
    name="br.edu.ftu.models.Email"
    table="EMAIL"
>

    <id
        name="id"
        column="EMAIL_ID"
        type="long"
    >
        <generator class="sequence">
            <param name="sequence">id_email</param>
          <!--  
              To add non XDoclet generator parameters, create a file named 
              hibernate-generator-params-Email.xml 
              containing the additional parameters and place it in your merge dir. 
          --> 
        </generator>
    </id>

    <timestamp
        name="timestamp"
        column="TIMESTAMP"
    />

    <property
        name="ativo"
        type="java.lang.Integer"
        update="true"
        insert="true"
        column="EMAIL_ATIVO"
        not-null="true"
    />

    <property
        name="principal"
        type="java.lang.Integer"
        update="true"
        insert="true"
        column="EMAIL_PRINCIPAL"
        not-null="true"
    />

    <property
        name="provedor"
        type="string"
        update="true"
        insert="true"
        column="EMAIL_PROVEDOR"
        length="50"
        not-null="true"
    />

    <property
        name="conta"
        type="string"
        update="true"
        insert="true"
        column="EMAIL_CONTA"
        length="50"
        not-null="true"
    />

    <!--
        To add non XDoclet property mappings, create a file named
            hibernate-properties-Email.xml
        containing the additional properties and place it in your merge dir.
    -->

</class>

[ /CODE ]

Criado 20 de junho de 2005
Ultima resposta 21 de jun. de 2005
Respostas 5
Participantes 3