如何使用HibernateDaoSupport类在Hibernate中使用自定义select语句

时间:2010-04-19 18:45:58

标签: java hibernate spring

我正在尝试使用getHibernateTemplate()方法在Hibernate中编写自定义select语句。我遇到了生成的映射问题。

示例代码:

List<User> users = getHibernateTemplate().find("Select user, sysdate as latestPost from User as user");
for (User user : users) {
assertNotNull(users.name);
}

上述行的目标是最终有一个联接,我可以获得用户发布的帖子的最大(日期)。我遇到的问题是生成的用户列表不是User对象的列表,我得到了一个类转换异常。

希望这是足够的代码。这是我的问题的一个大大简化的版本,以及我应用程序各个部分的片段组合。

2 个答案:

答案 0 :(得分:3)

想出来了。我已经在使用HibernateDaoSupport派生的DAO类,所以这个解决方案也是如此。

String queryString = "Select {user.*}, (select max(submitted) from posts where post.user_id = user.id) MAX_POST from users user";
SQLQuery query = getSession().createSQLQuery(queryString);
query.addEntity("user", User.class);
query.addScalar("MAX_POST", Hibernate.DATE);

List results = query.list();
List<User> users = new ArrayList();
for (Object item : results) {
    Object[] element = (Object[]) item; 
    User user = (User)element[0];
    user.setMaxPost((Date)element[1]);
    users.add(user);
}

以上示例大大简化,但应显示可用于解决此问题的方法。我实际上能够通过将必要的表合并到SQL中然后使用addJoin方法来包含我的一个EAGER提取

答案 1 :(得分:0)

听起来像Hibernate不想要你想要的。也许你应该从SimpleJDBCTemplate和RowMapper开始并从那里开始构建。