Problemas com consulta SQL com Hibernate

Boa noite galera :smiley:

Estou sem intender um erro que está dando em um sistema que estou fazendo aqui…

Eu estou usando hibernate e struts…os mapeamentos estão corretos, tanto que eles fazem a persistência direitinho no DB. Mas tem uma pequena coisa… em uma função que fiz para ele me retornar uma lista de acordo com uma query ele está dando um erro do hibernate. Deixem me mostrar o que ocorre:

Primeiramente o mapeamento meu banco de dados…

<!-- Arquivo de configuração do hibernate -->
<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/sistemaseduh</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>

        <!-- JDBC connection pool (use the built-in) -->
        <!--<property name="connection.pool_size">2</property>-->

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
        
        <!-- CONFIGURANDO POOL DE CONEXAO -->
        <property name="hibernate.c3p0.max_size">10</property>
        <property name="hibernate.c3p0.min_size">2</property>
        <property name="hibernate.c3p0.timeout">5000</property>
        <property name="hibernate.c3p0.max_statements">10</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>
        
        <mapping resource="Denuncia.hbm.xml"/>
        <mapping resource="Infracao.hbm.xml"/>

    </session-factory>

</hibernate-configuration>
<!-- Mapeamento da tabela Infracao, que tem um relacionamento 1:n com a tabela de denuncia tb_denuncia -->
<hibernate-mapping>
    <class name="fiscalizacao.modelo.Infracao" table="tb_infracao">
        <id name="id_tb_infracao"  >
            <generator class="increment"/>
        </id>
        <property name="descricao" />
        
        <set name="denuncia" inverse="true" lazy="true">
            <key column="id_tb_infracao"/>
            <one-to-many class="fiscalizacao.modelo.Denuncia"/>
	</set>	
    </class>
</hibernate-mapping>
<!-- Mapeamento da tabela Denuncia -->
<hibernate-mapping>
    <class name="fiscalizacao.modelo.Denuncia" table="tb_denuncia">
        <id name="id_tb_denuncia"  >
            <generator class="increment"/>
        </id>
        <property name="observacao" />
        <property name="endereco" />
        
        <many-to-one name="infracao" class="fiscalizacao.modelo.Infracao" column="id_tb_infracao"/>
    </class>
</hibernate-mapping>
//classe denuncia
public class Denuncia {
    
    private int id_tb_denuncia;
    private String observacao;
    private String endereco;
    private Infracao infracao;

//gets e sets omitidos

}
//classe infracao
public class Infracao {
    
    private int id_tb_infracao;
    private String descricao;
    private Collection denuncia;

//gets e sets omitidos

}
//classe denuncia, onde está dando o problema
public class DenunciaAction extends ActionSupport {
    
    private Denuncia denuncia;
    private List lista;
    private Infracao infracao;

// ...

//neste método é onde está o problema...ele tenta me retornar uma lista de denuncias a partir de uma query
public String listByInfracao(){
        String sql = "select a.endereco endereco_denuncia, p.descricao descricao_infracao, a.observacao observacao_denuncia from tb_denuncia a, tb_infracao p where a.id_tb_infracao = p.id_tb_infracao";
        this.setLista(new DenunciaDaoImpl().query(sql));
        return SUCCESS;
    }

}
//método ao qual a função listByInfracao se refere
public List query(String sql) {
        try {
            Query select = HibernateUtil.getSession().createSQLQuery(sql);
            return select.list();
        } catch (Exception e) {
            System.out.println("sql ta errada olha so o erro->"+e.getMessage());
            return null;
        }
        
    }

O que ocorre é o seguinte…toda vez que tento usar este método ele me retorna um erro do hybernate.

Hibernate: select a.endereco endereco_denuncia, p.descricao descricao_infracao, a.observacao observacao_denuncia from tb_denuncia a, tb_infracao p where a.id_tb_infracao = p.id_tb_infracao

sql ta errada olha so o erro->No Dialect mapping for JDBC type: -1

Mas ai é que está o problema…ele diz que está com problema de dialeto…mas eu indiquei o dialeto que uso no documento de configuração do hibernate :?

Se alguma alma iluminada puder me dar uma luz aqui ficaria grato :wink:

Pergunta: Pq vc ja nao pega a lista de infrações diretamento?
Tipo:

List<Infracao> denuncias = HibernateUtil.getSession().load(Infracao.class);

Agora se vc quiser pegar uma lista de denuncias a partir de uma infração simplesmente faça a busca da infração que vc quer no Hibernate e recupere a lista de Denuncias. Assim:

Infracao infracao = //Recupere como vc preferir no Hibernate a Infração desejada;
List<Denuncia> listaDenunciasDaInfracao = infracao.getDenuncias();

Aproveite os recursos do Hibernate e tente nao fazer muito uso de SQL, afinal vc usa ele pra isso.

Eu vou tentar usar HQL ou Critéria. Dessa forma ele apenas popula os objetos, ele não invoca nenhum método do hibernate para fazer a consulta.

Valeu :wink: