Hibernate查找部分字段 出现 ERROR: Invalid path: 'ac.arfenlei' 和 Unable to locate appropriate constructor on class 以及 Unable to locate class [Article] 错误

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/天,具体规则查看活动详情Blog Img