Hibernate查找部分字段 出现 ERROR: Invalid path: 'ac.arfenlei' 和 Unable to locate appropriate constructor on class 以及 Unable to locate class [Article] 错误
HTTP Status 500 - Request processing failed; nested exception is org.springframework.orm.hibernate4.HibernateQueryException: Invalid path: 'ac.arid' [select ac.arid,ac.artitle,ac.arfenlei,ac.ardate,ac.arcount from springMVC.NLoveB.po.Article ar]; nested exception is org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'ac.arid' [select ac.arid,ac.artitle,ac.arfenlei,ac.ardate,ac.arcount from springMVC.NLoveB.po.Article ar]
ERROR: Invalid path: 'ac.arfenlei' Invalid path: 'ac.arfenlei' at org.hibernate.hql.internal.ast.util.LiteralProcessor.lookupConstant(LiteralProcessor.java:129) at org.hibernate.hql.internal.ast.tree.DotNode.resolve(DotNode.java:225) at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:126) at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:121) at org.hibernate.hql.internal.ast.tree.DotNode.resolveSelectExpression(DotNode.java:727) at org.hibernate.hql.internal.ast.HqlSqlWalker.resolveSelectExpression(HqlSqlWalker.java:971) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2257) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:2194) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1476) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:573) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)今天想查询一个表中的部分字段,由于使用了错误的hql语句,以及错误的实体方法,所以出现如上错误
代码如下
String hql = "select ac.arid,ac.artitle,ac.arfenlei,ac.ardate,ac.arcount from article ar";很明显,查找多个字段,hql写错了
应该如下写法
String hql = "select new article(arid,artitle,arfenlei,ardate,arcount) from article";
同时需要在实体中,增加一个Article(arid,artitle,arfenlei,ardate,ar,arcount)构造方法
主要访问权限是public
否则会出现如下错误
org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [springMVC.NLoveB.po.Article]. Expected arguments are: java.lang.String [select new article(artitle) from springMVC.NLoveB.po.Article]
其中关键的错误代码提示是
Unable to locate appropriate constructor on class
就是这个构造方法找不到
所以构造方法必须是共有的构造方法,如
public Article(int arid,String artitle,int arfenlei,int arcount){ this.arid = arid; this.artitle = artitle; this.arfenlei = arfenlei; this.arcount = arcount; }
因此,如果需要查询表中的部分字段,完整的代码片段如下
实体类代码增加
public Article(int arid,String artitle,int arfenlei,int arcount){ this.arid = arid; this.artitle = artitle; this.arfenlei = arfenlei; this.arcount = arcount; }dao层代码,hql修改为
String hql = "select new article(arid,artitle,arfenlei,ardate,arcount) from article";需要注意的是dao层的代码,hql中的new article(arid,artitle,arfenlei,arcount)
这个类名article,必须是您在实体中通过@Entity定义的
如我这里定义的是
@Entity(name="article")
@Entity(name="article")如果你写真实的类名就会出现如下错误提示(真是类名 Article)
org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate class [Article] [select new Article(arid,artitle,arfenlei,arcount) from springMVC.NLoveB.po.Article]关键错误代码 Unable to locate class [Article] 没有这个类
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情