I have two models, Item and ShopSection. They have a many-to-many relationship.
@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
is meant to find items in a section, but I get this 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
What am I doing wrong?
You need to add the @Table
annotations like this:
@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);
}
}
You need to select from "item" and not from "Item". Entity name is case sensitive.
You need to declare Object in hibernate.cgf.xml
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With