分别用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就无法访问了呢?
大家帮忙看看,谢谢谢谢!!