2010-12-21 15 views
9

eşlenmedi. Çoktan çoğa ilişkileri var.org.hibernate.hql.ast.QuerySyntaxException: TABLO ADI ben iki model, Öğe ve ShopSection sahip

@Entity(name = "item") 
public class Item extends Model 
{ 
    @ManyToMany(cascade = CascadeType.PERSIST) 
    public Set<ShopSection> sections; 
} 

@Entity(name = "shop_section") 
public class ShopSection extends Model 
{ 
    public List<Item> findActiveItems(int page, int length) 
    { 
     return Item.find("select distinct i from Item i join i.sections as s where s.id = ?", id).fetch(page, length); 
    } 
} 

findActiveItems bir bölümünde öğeleri bulmak gerekiyordu ama bu hatayı alıyorum edilir:

org.hibernate.hql.ast.QuerySyntaxException: Item is not mapped [select distinct i from Item i join i.sections as s where s.id = ?] 
     at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180) 
     at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:111) 
     at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93) 
     at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:322) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3441) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3325) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:733) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:584) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244) 
     at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254) 
     at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185) 
     at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
     at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
     at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
     at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124) 
     at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) 
     at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) 
     at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770) 
     at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:272) 
     ... 8 more 

yanlış yapıyorum?

cevap

12

Böyle @Table ek not eklemem gerekiyor:

@Entity 
@Table(name = "item") 
public class Item extends Model 
{ 
    @ManyToMany(cascade = CascadeType.PERSIST) 
    public Set<ShopSection> sections; 
} 

@Entity 
@Table(name = "shop_section") 
public class ShopSection extends Model 
{ 
    public List<Item> findActiveItems(int page, int length) 
    { 
     return Item.find("select distinct i from Item i join i.sections as s where s.id = ?", id).fetch(page, length); 
    } 
} 
4

Sen "öğesi" değil "Item" den birini seçmek gerekir. Varlık adı büyük/küçük harfe duyarlıdır.

+0

yılında Nesne ilan etmek gerekir. bunun için teşekkür ederim. Çok açık gözükebilir ama her zaman yazdığınız kod/tablolar üzerinde çalışmazsınız. – anon58192932