Problema com consulta no hibernate em chave estrangeira

2 respostas
romarcio

Tenho a tabela Apostas com uma coluna estrangeira da tabela Tipo_de_Jogos.
mapeamento Apostas

<?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">
<hibernate-mapping package="loterica.model" auto-import="false">
  <class mutable="true" name="Apostas" table="APOSTAS">
    <id column="ID_APOSTA" name="id_aposta" type="long" unsaved-value="null">
      <generator class="identity"/>
    </id>

    // demais colunas

    <many-to-one class="loterica.model.TipoDeJogos" name="id_tipo_jogo">
      <column name="ID_TIPO_JOGO" not-null="true"/>
    </many-to-one>

  </class>
</hibernate-mapping>

Mapeamento Tipo_de_Jogos

<?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">
<hibernate-mapping package="loterica.model" auto-import="false">
  <class mutable="true" name="TipoDeJogos" table="TIPO_DE_JOGOS">
    <id column="ID_TIPO_JOGO" name="id_tipo_jogo" type="long" unsaved-value="null">
      <generator class="identity"/>
    </id>
    <property name="descr_tipo_jogo" type="string"/>
  </class>
</hibernate-mapping>

Classe Apostas

public class Apostas {

    private long id_aposta;
    private TipoDeJogos id_tipo_jogo;

    //métodos get e set
}

Classe tipo_de_jogos

public class TipoDeJogos {

    private long id_tipo_jogo;
    private String descr_tipo_jogo;
   
    public long getId_tipo_jogo() {
        return id_tipo_jogo;
    }

    public void setId_tipo_jogo(long id_tipo_jogo) {
        this.id_tipo_jogo = id_tipo_jogo;
    }
    // demais métodos get e set
}

Agora a consulta no ApostasDAO

public List findAllMegaSena(long id_tipo_jogo) {
        Session session = sessionFactory.openSession();
        List list = session.createCriteria(Apostas.class).add(Restrictions.eq("id_tipo_jogo", id_tipo_jogo)).list();
                   //session.createSQLQuery("select * from apostas where id_tipo_jogo = 3").list();
        session.flush();
        session.close();
        return list;
    }

O erro quando executo a consulta é o seguinte:

02/01/2010 18:29:59 org.hibernate.property.BasicPropertyAccessor$BasicGetter get
SEVERE: IllegalArgumentException in class: loterica.model.TipoDeJogos, getter method of property: id_tipo_jogo
02/01/2010 18:29:59 lotericadesktop.LotericaDesktopView jBtnVisualizarActionPerformed
SEVERE: null
org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of loterica.model.TipoDeJogos.id_tipo_jogo
.
.
.
at loterica.Dao.ApostasDAO.findAllMegaSena(ApostasDAO.java:57) //essa é a linha -> List list = session.createCriteria(Apostas.class).add(Restrictions.eq("id_tipo_jogo", id_tipo_jogo)).list();

Mas a consulta é montada pelo hibernate, antes que ele retorne o erro:

Hibernate: 
    select
        this_.ID_APOSTA as ID1_0_0_,
        this_.data_aposta as data2_0_0_,
        this_.dezena_1 as dezena3_0_0_,
        this_.dezena_2 as dezena4_0_0_,
        this_.dezena_3 as dezena5_0_0_,
        this_.dezena_4 as dezena6_0_0_,
        this_.dezena_5 as dezena7_0_0_,
        this_.dezena_6 as dezena8_0_0_,
        this_.ID_TIPO_JOGO as ID9_0_0_ 
    from
        APOSTAS this_ 
    where
        this_.ID_TIPO_JOGO=?

Alguém saberia o que pode ser?
Procurei em outros post, mas sempre se referem ao get não declarado na classe, e isso não acontece no meu caso.

Desconfio talvez que seja o tipo de dados. Eu tenho na classe Apostas o id_tipo_jogo como Tipo_de_Jogos e na classe Tipo_de_Jogos ele é long. Poderia ser isso ?

2 Respostas

juniorsatanas

pode ajudar:
http://www.guj.com.br/posts/list/121295.java
http://javafree.uol.com.br/topic-6484-Hibernate-%3E-Foreign-Key.html

romarcio

juniorsatanas:
pode ajudar:
http://www.guj.com.br/posts/list/121295.java
http://javafree.uol.com.br/topic-6484-Hibernate-%3E-Foreign-Key.html

Dei uma olhada nessas dicas dos links, mas nenhuma resolveu meu problema.

Criado 2 de janeiro de 2010
Ultima resposta 3 de jan. de 2010
Respostas 2
Participantes 2