2010-12-21 8 views
9

Tengo dos modelos, Item y ShopSection. Ellos tienen una relación de muchos a muchos.org.hibernate.hql.ast.QuerySyntaxException: TABLE NAME no está correlacionado

@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 está destinado a encontrar los elementos de una sección, pero me sale este error:

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 

¿Qué estoy haciendo mal?

Respuesta

12

es necesario agregar las anotaciones @Table así:

@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

Usted necesita seleccionar de "punto" y no de "artículo". El nombre de la entidad es sensible a las mayúsculas

+0

este era mi problema. gracias por esto. puede parecer un poco obvio, pero no siempre estás trabajando en el código/tablas que escribiste. – anon58192932

0

Necesita declarar el objeto en hibernate.cgf.xml

Cuestiones relacionadas