关于Hibernate使用Criteria查询的问题,无法获得字段的异常?

fengyang00 2010-04-08 02:58:12
分别用HQL和Criteria两种方式去查询,前者返回正常结果,后者报异常,我先分别把两段代码发给大家看看

HQL:

String hql=" from Reader where login='xiyangyang' and password='123'";
List list = HibernateUtil.getSession().createQuery(hql).list();
Reader reader = (Reader)list.get(0);
System.out.println(reader.getName());

这样是没问题的

Criteria:

Criteria criteria = HibernateUtil.getSession().createCriteria(Reader.class);

String username="xiyangyang";
criteria.add(Restrictions.eq("login", username));
List list = criteria.list();
Reader reader =(Reader) list.get(0);
System.out.println(reader.getName());

异常:
org.hibernate.QueryException: could not resolve property: login of: models.Reader
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.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1468)
at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:62)
at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1443)
at org.hibernate.persister.entity.JoinedSubclassEntityPersister.toColumns(JoinedSubclassEntityPersister.java:555)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:477)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:437)
at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:68)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:377)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:114)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:83)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:91)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1687)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at test.Test.main(Test.java:48)
我的疑惑是,criteria条件查询的时候所查的字段应该和HQL查询是一致的吧?那么HQL查询的时候,login字段都没问题,为什么换了Criteria之后login就无法访问了呢?
大家帮忙看看,谢谢谢谢!!
...全文
296 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyang00 2010-04-11
  • 打赏
  • 举报
回复
已经解决了,
criteria.add(Restrictions.eq("login", username));
这一句把"login"换成"Login"就好了,hql查询没问题是因为hql语言不分大小写呢。。。谢谢楼上两位关注
dickli1986 2010-04-08
  • 打赏
  • 举报
回复
看一下你的Reader类,有没有getter和setter这个login属性
  • 打赏
  • 举报
回复
关注。。
fengyang00 2010-04-08
  • 打赏
  • 举报
回复
整个类如下:
package test;

import java.util.List;

import models.HibernateUtil;
import models.Libraryadmin;
import models.Reader;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import actions.reader.ReaderLogin;

public class Test {

/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
System.out.println(ReaderLogin.class+" is called");
try{
HibernateUtil.getSession().beginTransaction();

Criteria criteria = HibernateUtil.getSession().createCriteria(Reader.class);
String username="xiyangyang";
criteria.add(Restrictions.eq("login", "xiyangyang"));
List list = criteria.list();
Reader reader =(Reader) list.get(0);
System.out.println(reader.getName());
}catch(Exception e){
e.printStackTrace();
}finally{
HibernateUtil.getSession().close();
}
}

}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧