构造器的顺序需要和hql中的顺序一致。否则会出现如下错误:
Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [com.flyinsky.eagle.user.po.UserInforPO] [select new UserInforPO(carId,name) from com.flyinsky.eagle.user.po.UserInforPO where name = ? and password = ?]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:225)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
at com.flyinsky.eagle.user.dao.UserDAO.getAllUsers(UserDAO.java:263)
at com.flyinsky.eagle.user.test.TestHibernate.main(TestHibernate.java:69)
Caused by: Unable to locate appropriate constructor on class [com.flyinsky.eagle.user.po.UserInforPO]
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.flyinsky.eagle.user.po.UserInforPO]
at org.hibernate.hql.ast.tree.ConstructorNode.resolveConstructor(ConstructorNode.java:122)
at org.hibernate.hql.ast.tree.ConstructorNode.prepare(ConstructorNode.java:88)
at org.hibernate.hql.ast.HqlSqlWalker.processConstructor(HqlSqlWalker.java:837)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:1952)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:1821)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1392)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:553)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
... 10 more
public class UserInforPO {
private int carId;
private String name;
private int age;
private String password;
private Date regDate;
private List<UserAddressPO> allAddress = new ArrayList<UserAddressPO>();
private String email;
public UserInforPO() {
}
public UserInforPO(String name,int carId) {
this.name = name;
this.carId = carId;
}
public UserInforPO(String name, int age, List address) {
this.name = name;
this.allAddress = address;
this.age = age;
}
public void getAllUsers(UserInforPO userPO){
String hql = "select new UserInforPO(carId,name) from UserInforPO " +
"where name = ? and password = ?";//安位置进行数值绑定
Session session = DBUtil.getSession();
Query query = session.createQuery(hql);
query.setParameter(0, userPO.getName());
query.setParameter(1, userPO.getPassword());
List list = query.list();
for(int i = 0; i < list.size(); i++){
UserInforPO user = (UserInforPO)list.get(i);
System.out.println(user.getCarId() + " " + user.getName());
}
将PO改为如下就可以了
public class UserInforPO {
private int carId;
private String name;
private int age;
private String password;
private Date regDate;
private List<UserAddressPO> allAddress = new ArrayList<UserAddressPO>();
private String email;
public UserInforPO() {
}
public UserInforPO(int carId,String name) {
this.name = name;
this.carId = carId;
}
分享到:
相关推荐
在Hibernate中,代理类(Proxy)是其实现懒加载(Lazy Loading)机制的核心组件之一。懒加载是一种优化技术,用于延迟对象的初始化直到真正需要使用该对象时。 在Hibernate框架中,实体类的实例通常对应数据库中的...
Hibernate中对表某个字段排序,直接在配置里面实现排序功能。
在Hibernate中,可以通过实现`Comparator`接口并覆盖`compare()`方法来自定义比较逻辑,然后在查询时传递这个比较器。例如: ```java public class GbkOrderComparator implements Comparator<String> { @Override ...
描述中的"hibernate orm框架api中文文档,学习资料,框架详解资料"进一步明确了这些资源的性质,即它们是关于Hibernate ORM框架的API文档、学习教程以及框架的详细解释,都是中文版本,方便中文读者学习。...
《Hibernate中文参考文档》是Java开发领域中关于Hibernate框架的重要学习资源,主要涵盖了Hibernate 3.6.10版本的相关内容。Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在Java应用程序...
在"hibernate.rar_ant hibernate po_pojo code g"的场景中,开发者可能已经有一个数据库表结构,他们想要利用Ant脚本来自动化创建对应的POJO类和Hibernate映射文件。这个过程通常包括以下步骤: 1. **数据库元数据...
总的来说,"Hibernate实体类生成器mysql版"是Java开发中的得力助手,它利用FreeMarker和Swing的优势,提供了便捷、高效的实体类代码生成解决方案,使开发者能够将更多精力集中在业务逻辑的实现上,从而提升整体项目...
注意:在Hibernate3中,第二个要求并非是Hibernate强制必须的。但最好这样做。 你不能使用一个IdentifierGenerator产生组合关键字。一个应用程序必须分配它自己的标识符。 使用<composite-id> 标签(并且内嵌元素...
POJO模型中,实体类需要实现无参构造函数、提供标识属性、使用非final类以及为持久化属性声明get和set方法,并且实现equals()与hashCode()方法。动态模型指的是使用HQL或JPQL进行查询和操作数据。 引导和启动:...
所有的持久化类(persistent classes)都要求有无参的构造器,因为Hibernate必须使用Java反射机制来为你创建对象。构造器(constructor)的访问级别可以是private,然而当生成运行时代理(runtime proxy)的时候则...
Hibernate开发者指南,包括HIBERNATE - Relational Persistence for Idiomatic Java.pdf,Hibernate Getting Started Guide.pdf,Hibernate Developer Guide.pdf,Hibernate 中文API文档.chm,Hibernate3.2.chm。
在Hibernate 5中,持久化对象(PO)的定义、映射文件的配置以及主配置文件的设置是实现数据持久化的关键技术。映射文件定义了实体类与数据库表之间的映射关系,以及实体类属性与表字段之间的映射关系。主配置文件则...
在Java开发中,Hibernate提供了一种抽象层,允许开发者使用面向对象的编程方式来操作数据库,而无需直接编写SQL语句,极大地提高了开发效率。 《Hibernate官方中文参考手册》是学习Hibernate的基础,它详细介绍了...
List在Hibernate中的映射主要用于保持元素的插入顺序,这在某些场景下是非常必要的。例如,在一个“用户-文章”关系中,如果我们要记录用户发表文章的时间顺序,那么使用List映射就显得尤为重要。List映射通常通过`...
在Hibernate 5.0中,这个框架进一步提升了性能和易用性,引入了许多新的特性和改进。 文档首先会介绍Hibernate的基本概念,包括实体(Entity)、持久化(Persistence)、对象关系映射(ORM)以及Session和...
3. **CGLIB或ASM**: 用于为那些没有默认构造函数或者不可被代理的类生成动态代理,用于Hibernate的懒加载功能。 4. **DOM4J或JAXB**: 处理XML配置文件,如映射文件。 **JDBC** Java Database Connectivity (JDBC)...
Hibernate 4.1是Java开发中的一个关键框架,主要用于对象关系映射(ORM),它使得开发者可以使用面向对象的方式来操作数据库,而无需关心底层的SQL语法。这份中文官方文档是学习和理解Hibernate 4.1功能和用法的重要...
这个压缩包包含的资源是Hibernate的中英文API文档,以及一些指南,旨在帮助开发者更好地理解和使用Hibernate。 1. **Hibernate API文档**: Hibernate的API文档是理解其工作原理的关键。`Hibernate3.2.chm`可能是...
15. 参数消息插值器(Parameter message interpolator):这是Hibernate Validator中用于自定义错误消息格式的组件,允许开发人员定义复杂的错误消息策略。 16. 资源包定位器(Resource bundle locator):...