Problema no Hibernate

Estou tentando migrar uma aplicação feita em VB para Grails. Para isso estou utilizando Hibernate. Consigo gerar os POJOS, os hbm.xml e o cfg.xml. A aplicação é muito grande, mas já estou tendo problemas no começo. Tenho uma classe cliente, uma classe motorista e usuário. O relacionamento de cliente e motorista é de 1 para muitos. E a de cliente para usuários tbm. Estou declarando motorista e usuário usando “Set” na classe cliente. A classe cliente e seu arquivo de mapeamento estão abaixo:

[code]package ejb3.pojo;
// default package

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

/**

  • ClienteBean generated by MyEclipse Persistence Tools
    */

public class ClienteBean implements java.io.Serializable {

// Fields    

 private short id;
 private short clientePrincipal;
 private String codigo;
 private Integer codigoExterno;
 private String descricao;
 private String endereco;
 private String numero;
 private String complemento;
 private String bairro;
 private String cidade;
 private String estado;
 private String cep;
 private String pais;
 private String contato1;
 private String contato2;
 private String telefone;
 private String fax;
 private String email1;
 private String email2;
 private String site;
 private String cpf;
 private String celular1;
 private String ceular2;
 private Integer ipPrimario;
 private Integer ipSecundario;
 private short porta1;
 private short porta2;
 private boolean clientePublico;
 private Date cliDhs;
 private Set motoristas = new HashSet();
 private Set usuarios = new HashSet();


// Constructors

/** default constructor */
public ClienteBean() {
}

/** minimal constructor */
public ClienteBean(short clientePrincipal, String codigo, String descricao, Integer ipPrimario, Integer ipSecundario, short porta1, short porta2, boolean clientePublico, Date cliDhs) {
    this.clientePrincipal = clientePrincipal;
    this.codigo = codigo;
    this.descricao = descricao;
    this.ipPrimario = ipPrimario;
    this.ipSecundario = ipSecundario;
    this.porta1 = porta1;
    this.porta2 = porta2;
    this.clientePublico = clientePublico;
    this.cliDhs = cliDhs;
}

/** full constructor */
public ClienteBean(short clientePrincipal, String codigo, Integer codigoExterno, String descricao, String endereco, String numero, String complemento, String bairro, String cidade, String estado, String cep, String pais, String contato1, String contato2, String telefone, String fax, String email1, String email2, String site, String cpf, String celular1, String ceular2, Integer ipPrimario, Integer ipSecundario, short porta1, short porta2, boolean clientePublico, Date cliDhs) {
    this.clientePrincipal = clientePrincipal;
    this.codigo = codigo;
    this.codigoExterno = codigoExterno;
    this.descricao = descricao;
    this.endereco = endereco;
    this.numero = numero;
    this.complemento = complemento;
    this.bairro = bairro;
    this.cidade = cidade;
    this.estado = estado;
    this.cep = cep;
    this.pais = pais;
    this.contato1 = contato1;
    this.contato2 = contato2;
    this.telefone = telefone;
    this.fax = fax;
    this.email1 = email1;
    this.email2 = email2;
    this.site = site;
    this.cpf = cpf;
    this.celular1 = celular1;
    this.ceular2 = ceular2;
    this.ipPrimario = ipPrimario;
    this.ipSecundario = ipSecundario;
    this.porta1 = porta1;
    this.porta2 = porta2;
    this.clientePublico = clientePublico;
    this.cliDhs = cliDhs;
}


// Property accessors

public short getId() {
    return this.id;
}

public void setId(short id) {
    this.id = id;
}

public short getClientePrincipal() {
    return this.clientePrincipal;
}

public void setClientePrincipal(short clientePrincipal) {
    this.clientePrincipal = clientePrincipal;
}

public String getCodigo() {
    return this.codigo;
}

public void setCodigo(String codigo) {
    this.codigo = codigo;
}

public Integer getCodigoExterno() {
    return this.codigoExterno;
}

public void setCodigoExterno(Integer codigoExterno) {
    this.codigoExterno = codigoExterno;
}

public String getDescricao() {
    return this.descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

public String getEndereco() {
    return this.endereco;
}

public void setEndereco(String endereco) {
    this.endereco = endereco;
}

public String getNumero() {
    return this.numero;
}

public void setNumero(String numero) {
    this.numero = numero;
}

public String getComplemento() {
    return this.complemento;
}

public void setComplemento(String complemento) {
    this.complemento = complemento;
}

public String getBairro() {
    return this.bairro;
}

public void setBairro(String bairro) {
    this.bairro = bairro;
}

public String getCidade() {
    return this.cidade;
}

public void setCidade(String cidade) {
    this.cidade = cidade;
}

public String getEstado() {
    return this.estado;
}

public void setEstado(String estado) {
    this.estado = estado;
}

public String getCep() {
    return this.cep;
}

public void setCep(String cep) {
    this.cep = cep;
}

public String getPais() {
    return this.pais;
}

public void setPais(String pais) {
    this.pais = pais;
}

public String getContato1() {
    return this.contato1;
}

public void setContato1(String contato1) {
    this.contato1 = contato1;
}

public String getContato2() {
    return this.contato2;
}

public void setContato2(String contato2) {
    this.contato2 = contato2;
}

public String getTelefone() {
    return this.telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

public String getFax() {
    return this.fax;
}

public void setFax(String fax) {
    this.fax = fax;
}

public String getEmail1() {
    return this.email1;
}

public void setEmail1(String email1) {
    this.email1 = email1;
}

public String getEmail2() {
    return this.email2;
}

public void setEmail2(String email2) {
    this.email2 = email2;
}

public String getSite() {
    return this.site;
}

public void setSite(String site) {
    this.site = site;
}

public String getCpf() {
    return this.cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

public String getCelular1() {
    return this.celular1;
}

public void setCelular1(String celular1) {
    this.celular1 = celular1;
}

public String getCeular2() {
    return this.ceular2;
}

public void setCeular2(String ceular2) {
    this.ceular2 = ceular2;
}

public Integer getIpPrimario() {
    return this.ipPrimario;
}

public void setIpPrimario(Integer ipPrimario) {
    this.ipPrimario = ipPrimario;
}

public Integer getIpSecundario() {
    return this.ipSecundario;
}

public void setIpSecundario(Integer ipSecundario) {
    this.ipSecundario = ipSecundario;
}

public short getPorta1() {
    return this.porta1;
}

public void setPorta1(short porta1) {
    this.porta1 = porta1;
}

public short getPorta2() {
    return this.porta2;
}

public void setPorta2(short porta2) {
    this.porta2 = porta2;
}

public boolean getClientePublico() {
    return this.clientePublico;
}

public void setClientePublico(boolean clientePublico) {
    this.clientePublico = clientePublico;
}

public Date getCliDhs() {
    return this.cliDhs;
}

public void setCliDhs(Date cliDhs) {
    this.cliDhs = cliDhs;
}

public Set getMotoristas() {
	return motoristas;
}

public void setMotoristas(Set motoristas) {
	this.motoristas = motoristas;
}

public Set getUsuarios() {
	return usuarios;
}

public void setUsuarios(Set usuarios) {
	this.usuarios = usuarios;
}

}
[/code]

O arquivo Cliente.hbm.xml

<?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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="ejb3.pojo">
    <class name="ClienteBean" table="cliente" catalog="arena">
        <id name="id" type="short">
            <column name="CLI_ID" />
            <generator class="native"></generator>
        </id>
        <property name="clientePrincipal" type="short">
            <column name="CLI_MAE" not-null="true" />
        </property>
        <property name="codigo" type="string">
            <column name="CLI_COD" length="20" not-null="true" unique="true" />
        </property>
        <property name="codigoExterno" type="integer">
            <column name="CLI_COX" />
        </property>
        <property name="descricao" type="string">
            <column name="CLI_DSC" length="60" not-null="true" unique="true" />
        </property>
        <property name="endereco" type="string">
            <column name="CLI_RUA" length="250" />
        </property>
        <property name="numero" type="string">
            <column name="CLI_NUM" length="6" />
        </property>
        <property name="complemento" type="string">
            <column name="CLI_COM" length="30" />
        </property>
        <property name="bairro" type="string">
            <column name="CLI_BAI" length="20" />
        </property>
        <property name="cidade" type="string">
            <column name="CLI_CID" length="25" />
        </property>
        <property name="estado" type="string">
            <column name="CLI_UF" length="20" />
        </property>
        <property name="cep" type="string">
            <column name="CLI_CEP" length="10" />
        </property>
        <property name="pais" type="string">
            <column name="CLI_PAIS" length="20" />
        </property>
        <property name="contato1" type="string">
            <column name="CLI_CON1" length="60" />
        </property>
        <property name="contato2" type="string">
            <column name="CLI_CON2" length="60" />
        </property>
        <property name="telefone" type="string">
            <column name="CLI_TEL" length="30" />
        </property>
        <property name="fax" type="string">
            <column name="CLI_FAX" length="20" />
        </property>
        <property name="email1" type="string">
            <column name="CLI_EML1" length="80" />
        </property>
        <property name="email2" type="string">
            <column name="CLI_EML2" length="80" />
        </property>
        <property name="site" type="string">
            <column name="CLI_SIT" length="55" />
        </property>
        <property name="cpf" type="string">
            <column name="CLI_CPF" length="20" />
        </property>
        <property name="celular1" type="string">
            <column name="CLI_CEL1" length="20" />
        </property>
        <property name="ceular2" type="string">
            <column name="CLI_CEL2" length="20" />
        </property>
        <property name="ipPrimario" type="integer">
            <column name="CLI_IP1" not-null="true" />
        </property>
        <property name="ipSecundario" type="integer">
            <column name="CLI_IP2" not-null="true" />
        </property>
        <property name="porta1" type="short">
            <column name="CLI_PRT1" not-null="true" />
        </property>
        <property name="porta2" type="short">
            <column name="CLI_PRT2" not-null="true" />
        </property>
        <property name="clientePublico" type="boolean">
            <column name="CLI_FCP" not-null="true" />
        </property>
        <property name="cliDhs" type="timestamp">
            <column name="CLI_DHS" length="19" not-null="true" />
        </property>
        <set name="motoristas">
        	<key column="CLI_ID"/>
        	<one-to-many class="MotoristaBean"/>
        </set>
        <set name="usuarios">
        	<key column="CLI_ID"/>
        	<one-to-many class="UsuarioBean"/>
        </set>
    </class>
</hibernate-mapping>

Aqui está a classe motorista e logo em seguida o arquivo de mapeamento Motorista.hbm.xml

package ejb3.pojo;
// default package



/**
 * MotoristaBean generated by MyEclipse Persistence Tools
 */

public class MotoristaBean  implements java.io.Serializable {


    // Fields    

     private short id;
     private String nome;
     private String cpf;
     private ClienteBean clienteBean;
     private String rua;
     private String numero;
     private String bairro;
     private String cidade;
     private String estado;
     private String pais;
     private String cep;
     private String telefone;
     private String telefone2;
     private String imagem;


    // Constructors

    /** default constructor */
    public MotoristaBean() {
    }

	/** minimal constructor */
    public MotoristaBean(String nome, ClienteBean clienteBean) {
        this.nome = nome;
        this.clienteBean = clienteBean;
    }
    
    /** full constructor */
    public MotoristaBean(String nome, String cpf, ClienteBean clienteBean, String rua, String numero, String bairro, String cidade, String estado, String pais, String cep, String telefone, String telefone2, String imagem) {
        this.nome = nome;
        this.cpf = cpf;
        this.clienteBean = clienteBean;
        this.rua = rua;
        this.numero = numero;
        this.bairro = bairro;
        this.cidade = cidade;
        this.estado = estado;
        this.pais = pais;
        this.cep = cep;
        this.telefone = telefone;
        this.telefone2 = telefone2;
        this.imagem = imagem;
    }

   
    // Property accessors

    public short getId() {
        return this.id;
    }
    
    public void setId(short id) {
        this.id = id;
    }

    public String getNome() {
        return this.nome;
    }
    
    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCpf() {
        return this.cpf;
    }
    
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public ClienteBean getClienteBean() {
        return this.clienteBean;
    }
    
    public void setClienteBean(ClienteBean clienteBean) {
        this.clienteBean = clienteBean;
    }

    public String getRua() {
        return this.rua;
    }
    
    public void setRua(String rua) {
        this.rua = rua;
    }

    public String getNumero() {
        return this.numero;
    }
    
    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getBairro() {
        return this.bairro;
    }
    
    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCidade() {
        return this.cidade;
    }
    
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getEstado() {
        return this.estado;
    }
    
    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getPais() {
        return this.pais;
    }
    
    public void setPais(String pais) {
        this.pais = pais;
    }

    public String getCep() {
        return this.cep;
    }
    
    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getTelefone() {
        return this.telefone;
    }
    
    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getTelefone2() {
        return this.telefone2;
    }
    
    public void setTelefone2(String telefone2) {
        this.telefone2 = telefone2;
    }

    public String getImagem() {
        return this.imagem;
    }
    
    public void setImagem(String imagem) {
        this.imagem = imagem;
    }

}
<?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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="ejb3.pojo">
    <class name="MotoristaBean" table="motorista" catalog="arena">
        <id name="id" type="short">
            <column name="MOT_ID" />
            <generator class="native"></generator>
        </id>
        <property name="nome" type="string">
            <column name="MOT_NOM" length="100" not-null="true" />
        </property>
        <property name="cpf" type="string">
            <column name="MOT_CPF" length="10" />
        </property>
        <property name="rua" type="string">
            <column name="MOT_RUA" length="250" />
        </property>
        <property name="numero" type="string">
            <column name="MOT_NUM" length="6" />
        </property>
        <property name="bairro" type="string">
            <column name="MOT_BAI" length="20" />
        </property>
        <property name="cidade" type="string">
            <column name="MOT_CID" length="25" />
        </property>
        <property name="estado" type="string">
            <column name="MOT_UF" length="20" />
        </property>
        <property name="pais" type="string">
            <column name="MOT_PAI" length="20" />
        </property>
        <property name="cep" type="string">
            <column name="MOT_CEP" length="10" />
        </property>
        <property name="telefone" type="string">
            <column name="MOT_TEL" length="30" />
        </property>
        <property name="telefone2" type="string">
            <column name="MOT_TEL2" length="30" />
        </property>
        <property name="imagem" type="java.lang.String">
            <column name="MOT_IMG" />
        </property>
        <many-to-one name="clienteBean" column="CLI_ID" class="ClienteBean" not-null="true" />
    </class>
</hibernate-mapping>

O problema que está acontecendo é que qualquer comando que eu digitar no prompt do grails, tanto para gerar os controles e visão quanto para rodar a aplicação está aparecendo a mensagem de erro

2008-08-25 14:55:32.473::WARN:  Failed startup of context org.mortbay.jetty.webapp.WebAppContext@1a88001{/arena,G:\Desenvolvimento\workspace\arena/web-app}
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is java.lang.NullPointerException
	at java.security.AccessController.doPrivileged(Native Method)
	at RunApp_groovy$_run_closure2_closure7.doCall(RunApp_groovy:68)
	at RunApp_groovy$_run_closure2_closure7.doCall(RunApp_groovy)
	at Init_groovy$_run_closure6.doCall(Init_groovy:128)
	at RunApp_groovy$_run_closure2.doCall(RunApp_groovy:67)
	at RunApp_groovy$_run_closure2.doCall(RunApp_groovy)
	at RunApp_groovy$_run_closure1.doCall(RunApp_groovy:59)
	at RunApp_groovy$_run_closure1.doCall(RunApp_groovy)
	at gant.Gant.dispatch(Gant.groovy:271)
	at gant.Gant.this$2$dispatch(Gant.groovy)
	at gant.Gant.invokeMethod(Gant.groovy)
	at gant.Gant.processTargets(Gant.groovy:436)
	at gant.Gant.processArgs(Gant.groovy:372)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is java.lang.NullPointerException
	at java.security.AccessController.doPrivileged(Native Method)
	... 13 more
Caused by: java.lang.NullPointerException
	... 14 more
2008-08-25 14:55:32.473::WARN:  Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is java.lang.NullPointerException:
java.lang.NullPointerException
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessController.doPrivileged(Native Method)
	at RunApp_groovy$_run_closure2_closure7.doCall(RunApp_groovy:68)
	at RunApp_groovy$_run_closure2_closure7.doCall(RunApp_groovy)
	at Init_groovy$_run_closure6.doCall(Init_groovy:128)
	at RunApp_groovy$_run_closure2.doCall(RunApp_groovy:67)
	at RunApp_groovy$_run_closure2.doCall(RunApp_groovy)
	at RunApp_groovy$_run_closure1.doCall(RunApp_groovy:59)
	at RunApp_groovy$_run_closure1.doCall(RunApp_groovy)
	at gant.Gant.dispatch(Gant.groovy:271)
	at gant.Gant.this$2$dispatch(Gant.groovy)
	at gant.Gant.invokeMethod(Gant.groovy)
	at gant.Gant.processTargets(Gant.groovy:436)
	at gant.Gant.processArgs(Gant.groovy:372)
2008-08-25 14:55:33.566::INFO:  Started SelectChannelConnector@0.0.0.0:8080

Não sei como resolver o problema, se alguém souber o que fazer aqui por favor me ajude. Lembrando que a classe Usuário está igual à classe Motorista. mesmo tipo de relacionamento com a Cliente. Portanto não há necessidade de pôr o código de Usuário aqui.

Lembrando que esse problema de “java.lang.NullPointerException” ocorre apenas quando há várias coleções na classe cliente, no caso, motorista e usuário. Quando eu faço com apenas uma coleção (motorista ou usuário) esse erro não ocorre.