[RESOLVIDO] jse com hibernate e mysql

7 respostas
dzanotto

Boa tarde pessoal! Estou com um problema na minha aplicação desktop. Uso o hibernate e o banco é o mySQL 5.

O erro é o seguinte:
org.hibernate.QueryException: could not resolve property: idCurso of: dominio.Turma [SELECT p FROM dominio.Turma p where p.idCurso = '2']
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38)
at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1362)
at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:279)
at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:386)
at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:566)
at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:241)
at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:188)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:90)
at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:727)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1216)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4041)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3525)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1762)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:776)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:577)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)

e mais um monte de linha dando seqüência nisto ai.

Acontece que pelo que analisei está tudo certo:

Turma.java

public class Turma implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
	private int idTurma;
	private Curso curso;
	private String nome;
	private String turno;
	private Set<Matricula> matriculas = new HashSet<Matricula>(0);
	private Set<Matricula> matriculas_1 = new HashSet<Matricula>(0);
	private Set<Ministra> ministras = new HashSet<Ministra>(0);
	private Set<Ministra> ministras_1 = new HashSet<Ministra>(0);
	private static final HibernateRepositorio hibernateRepositorio = new HibernateRepositorio();

	public Turma() {
	}

	public Turma(Curso curso, String nome, String turno) {
		this.curso = curso;
		this.nome = nome;
		this.turno = turno;
	}

	public Turma(Curso curso, String nome, String turno,
			Set<Matricula> matriculas, Set<Matricula> matriculas_1,
			Set<Ministra> ministras, Set<Ministra> ministras_1) {
		this.curso = curso;
		this.nome = nome;
		this.turno = turno;
		this.matriculas = matriculas;
		this.matriculas_1 = matriculas_1;
		this.ministras = ministras;
		this.ministras_1 = ministras_1;
	}

                //GETTERS AND SETTERS
Turma.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 10/11/2008 00:07:15 by Hibernate Tools 3.2.2.GA -->
<hibernate-mapping>
    <class name="dominio.Turma" table="turma" catalog="alagoascursos">
        <id name="idTurma" type="java.lang.Integer">
            <column name="id_turma" />
            <generator class="identity" />
        </id>
        <many-to-one name="curso" class="dominio.Curso" fetch="select">
            <column name="id_curso" not-null="true" />
        </many-to-one>
        <property name="nome" type="string">
            <column name="nome" length="45" not-null="true" />
        </property>
        <property name="turno" type="string">
            <column name="turno" length="45" not-null="true" />
        </property>
        <set name="matriculas" inverse="true">
            <key>
                <column name="id_turma" not-null="true" />
            </key>
            <one-to-many class="dominio.Matricula" />
        </set>
        <set name="matriculas_1" inverse="true">
            <key>
                <column name="id_turma" not-null="true" />
            </key>
            <one-to-many class="dominio.Matricula" />
        </set>
        <set name="ministras" inverse="true">
            <key>
                <column name="id_turma" not-null="true" />
            </key>
            <one-to-many class="dominio.Ministra" />
        </set>
        <set name="ministras_1" inverse="true">
            <key>
                <column name="id_turma" not-null="true" />
            </key>
            <one-to-many class="dominio.Ministra" />
        </set>
    </class>
</hibernate-mapping>
hibernate.cfg.xml
<?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">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost/########</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.username">######</property>
        <property name="hibernate.connection.password">######</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        
        <!-- session mapping -->
        <mapping resource="Aluno.hbm.xml" />
        <mapping resource="Aula.hbm.xml" />
        <mapping resource="Banco.hbm.xml" />
        <mapping resource="Boleto.hbm.xml" />
        <mapping resource="Cartao.hbm.xml" />
        <mapping resource="Cheque.hbm.xml" />
        <mapping resource="ControleCheque.hbm.xml" />
        <mapping resource="Curso.hbm.xml" />
        <mapping resource="Materia.hbm.xml" />
        <mapping resource="Matricula.hbm.xml" />
        <mapping resource="Ministra.hbm.xml" />
        <mapping resource="Modulo.hbm.xml" />
        <mapping resource="OrgaoExpedidor.hbm.xml" />
        <mapping resource="PagarAula.hbm.xml" />
        <mapping resource="PagarAulaCheque.hbm.xml" />
        <mapping resource="PagarMatricula.hbm.xml" />
        <mapping resource="Professor.hbm.xml" />
        <mapping resource="Turma.hbm.xml" />
        <mapping resource="Usuario.hbm.xml" />

    </session-factory>
</hibernate-configuration>
Método que está gerando este erro, que se encontra na classe HibernateRepositorio.java
public ArrayList<Object> consultarPor(Object objeto, String atributo, Object campo) throws HibernateException {
		
		ArrayList<Object> listaObjetos = new ArrayList<Object>();
		try {
			session = HibernateUtil.currentSession();
			Query query = session.createQuery("SELECT p FROM " + objeto.getClass().getName() + " p where p." + atributo + " = '" + campo + "'");
			
			for(Iterator it=query.iterate();it.hasNext();){
				listaObjetos.add(it.next());
			}
		} catch (Exception e) {
			session.cancelQuery();
			e.printStackTrace();
		} finally {
			HibernateUtil.sessionClose();
		}
		return listaObjetos;
	}

Alguém poderia desvendar este mistério? :?

7 Respostas

latorre

Você já testou a query no mysql?

dzanotto

já testei brother, e deu certo… só aqui no hibernate é que não está funcionando… :S

jwalker
FROM Turma p where p.curso.idCurso = '2';

Tenta assim

Abraços

dzanotto

Mesma coisa, só muda que agora ele está chamando na classe Curso:

org.hibernate.QueryException: could not resolve property: id_curso of: dominio.Curso [FROM dominio.Turma p where p.curso.id_curso = 2]

at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)

at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38)

at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1362)

at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:279)

at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:386)

at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:566)

at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:241)

at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:188)

at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)

at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:90)

at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:727)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1216)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4041)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3525)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1762)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:776)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:577)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)

at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)

at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)

at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)

at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)

at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:77)

at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:56)

at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)

at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)

at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)

at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1627)

at repositorio.HibernateRepositorio.consultarPor(HibernateRepositorio.java:131)

at apresentacao.teste1.main(teste1.java:49)
dzanotto

alguém pode ajudar pelo amor de Jah?!

Marky.Vasconcelos

Se ta usando o hibernate por que não fazer a Query com ele?
Isso:

Query query = session.createQuery("SELECT p FROM " + objeto.getClass().getName() + " p where p." + atributo + " = '" + campo + "'");   
           
        for(Iterator it=query.iterate();it.hasNext();){   
            listaObjetos.add(it.next());   
        }

Fica:

Criteria crit = session.createCriteria(objeto.getClass());
crit.addRestriction(Restrictions.eq(atributo,campo)); 
      listaObjetos = crit.list();
dzanotto

Valeu galera, acredito que conseguimos resolver essa bronca.

1º problema: estava passando o parâmetro errado… em vez de id_curso deve ser idCurso por causa do mapeamento feito no xml…

2º problema: qnd ele pega esta turma, que pertence ao curso ‘2’ como eu pedia no exemplo acima, ele estava mandando tudo certinho. Não conseguia pegar o nome do curso pq ele só setava o id do curso, ou seja, após pegar a turma, eu devo listar o curso que tem o id desta turma e dps dar um turma.setCurso(“cursoBuscado”) - curso buscado no banco de dados.

Obrigado.

Criado 14 de novembro de 2008
Ultima resposta 14 de nov. de 2008
Respostas 7
Participantes 4