【问题标题】:org.hibernate.QueryException: could not resolve property: is_approved of: comorg.hibernate.QueryException:无法解析属性:is_approved of:com
【发布时间】:2016-10-17 12:01:12
【问题描述】:

我正在通过用户 ID 从购买表中获取记录,它工作正常,但现在想添加一个条件,即 (is_approved) 列值 = 1,我在同一个查询中添加了这个条件,它正在通过错误

//我的DAOHibernate方法如下

public int getNumOfPurchasesByUserId(Integer userId) {
    System.out.println("########################### Calling getNumOfPurchasesByUserId %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
    String sql = "select count(p) from " + Purchase.class.getName() + " p where p.userid = :userid and p.is_approved=1";

    Session session = null;
    Query q = null;
    int count = 0;
    try {
        session = getHibernateTemplate().getSessionFactory().openSession();
        q = session.createQuery(sql);
        q.setInteger("userid", userId);


        try {
            count = ((Long)q.uniqueResult()).intValue();
        } catch (Exception e) {}
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        if (session != null) {
            session.close();
        }
    }

    return count;
}

//我的错误是

########################### Calling getNumOfPurchasesByUserId      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
org.hibernate.QueryException: could not resolve property: is_approved of: com.newscom.model.Purchase [select count(p) from     com.newscom.model.Purchase p where p.userid = :userid and p.is_approved=1]
at     org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:75)
at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1465)
at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:315)
at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:487)
at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:611)
at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:263)
at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:210)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:117)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:113)
at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:880)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1330)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4471)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3944)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2047)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1975)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:831)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:617)
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:256)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:187)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)
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 com.newscom.dao.hibernate.PurchaseDAOHibernate.getNumOfPurchasesByUserId(PurchaseDA

//购买中

@Entity
@Table(name = "Purchase")
@NamedQueries(value = {
@NamedQuery(name = "GetPurchaseByUserID", query = "SELECT p from Purchase p where p.userid = :userid order by p.status, p.purchaseid desc"),



private boolean isApproved;
private Date approvalTime;
private Integer approvedBy;

@Column(name="is_approved")
public boolean getIsApproved() {
    return isApproved;
}
public void setIsApproved(boolean isApproved) {
    this.isApproved = isApproved;
}

【问题讨论】:

  • 可以发Purchase的代码吗?
  • 您好,这是命名查询..
  • 请贴出实体的全部代码。
  • 该列在该实体中出现。

标签: java mysql sql spring hibernate


【解决方案1】:

您应该在查询中使用属性名,而不是列名:

String sql = "select count(p) from " + Purchase.class.getName() + " p where p.userid = :userid and p.isApproved=1";

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多