Ajuda com HQL e mapeamento

4 respostas
K
Boa noite a todos. Eu estou começando com Java e peguei um tutorial bem legal no site do netbeans (http://netbeans.org/kb/docs/web/hibernate-webapp_pt_BR.html). Estava dando tudo certo, até a hora que mandou testar a conexão, digitando um comando (from Film) (Tabela que já veio com o netbeans). Porém quando eu mando executar a query, aparece o erro:
org.hibernate.hql.ast.QuerySyntaxException: Film is not mapped [from Film]
	at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
	at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
	at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
	at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:255)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
	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.<init>(HQLQueryPlan.java:77)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(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:1623)
Tá, eu sei que está falando para mapear a classe com a tabela, certo? Meu arquivo hibernate.cfg.xml está assim:
<?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.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sakila</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <mapping resource="dvd_rental/Actor.hbm.xml"/>
    <mapping resource="dvd_rental/Category.hbm.xml"/>
    <mapping resource="dvd_rental/Film.hbm.xml"/>
    <mapping resource="dvd_rental/FilmCategory.hbm.xml"/>
    <mapping resource="dvd_rental/Language.hbm.xml"/>
    <mapping resource="dvd_rental/FilmActor.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
E eu tenho uma classe chamada Film.cgf.xml, que o netbeans criou automaticamente quando eu criei o arquivo de engenharia reversa:
<?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 Jul 19, 2010 8:29:23 PM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="dvd_rental.Film" table="Film" catalog="sakila">
        <id name="filmId" type="java.lang.Short">
            <column name="film_id" />
            <generator class="identity" />
        </id>
        <many-to-one name="languageByOriginalLanguageId" class="dvd_rental.Language" fetch="select">
            <column name="original_language_id" />
        </many-to-one>
        <many-to-one name="languageByLanguageId" class="dvd_rental.Language" fetch="select">
            <column name="language_id" not-null="true" />
        </many-to-one>
        <property name="title" type="string">
            <column name="title" not-null="true" />
        </property>
        <property name="description" type="string">
            <column name="description" length="65535" />
        </property>
        <property name="releaseYear" type="date">
            <column name="release_year" length="0" />
        </property>
        <property name="rentalDuration" type="byte">
            <column name="rental_duration" not-null="true" />
        </property>
        <property name="rentalRate" type="big_decimal">
            <column name="rental_rate" precision="4" not-null="true" />
        </property>
        <property name="length" type="java.lang.Short">
            <column name="length" />
        </property>
        <property name="replacementCost" type="big_decimal">
            <column name="replacement_cost" precision="5" not-null="true" />
        </property>
        <property name="rating" type="string">
            <column name="rating" length="5" />
        </property>
        <property name="specialFeatures" type="string">
            <column name="special_features" length="54" />
        </property>
        <property name="lastUpdate" type="timestamp">
            <column name="last_update" length="19" not-null="true" />
        </property>
        <set name="filmActors" inverse="true">
            <key>
                <column name="film_id" not-null="true" />
            </key>
            <one-to-many class="dvd_rental.FilmActor" />
        </set>
        <set name="filmCategories" inverse="true">
            <key>
                <column name="film_id" not-null="true" />
            </key>
            <one-to-many class="dvd_rental.FilmCategory" />
        </set>
    </class>
</hibernate-mapping>

Acredito que esteja tudo mapeado ok, certo?
Alguém poderia me ajudar?
Obrigado!

4 Respostas

LPJava

pelo erro problema na sintaxe da query do HQL.

ver se este post ajuda.

K

Olá, obrigado pela resposta!
Este post parece bem interessante. À noite irei ve-lo com mais calma, porém, eu não estou nem construindo uma query, na verdade, nesse exemplo, o tutorial pede para clicar com o direito em cima do arquivo “hibernate.cfg.xml” e clicar em ‘Executar HQL’ ou algo assim. Ai abre uma tela para digitar a query, só que o exemplo pede só para digitar “from Film”, e como na primeira linha do erro aparece: “org.hibernate.hql.ast.QuerySyntaxException: Film is not mapped [from Film]”, pensei que fosse problema de mapeamento. À noite irei ver direitinho se sigo aquele post e posto aqui novamente!
Obrigado mais uma vez.

LPJava

nao me leve a mal, mas se vc quer aprender de fato, esqueca a IDE e vai implementar na mao, por exemplo, será mais trabalhoso, a possibilidade de erros por digitacao ou esquecimento de algo é maior, mas será mais produto. Executar uma query é facil, entender o processo é o mais importante.
Eu comecei olhar seu code acima, mas quando vim que foi gerado pela IDE deixei de lado.
Bom, é uma dica apenas se de fato que aprender.

K

Eu concordo com você, porém não encontro muitos materiais bons para aprender.
Esse post que você me mandou, tem a primeira parte dele. Acha que vale a pena começar por ele?

Criado 19 de julho de 2010
Ultima resposta 20 de jul. de 2010
Respostas 4
Participantes 2