代码之家  ›  专栏  ›  技术社区  ›  Bill Leeper

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

  •  0
  • Bill Leeper  · 技术社区  · 15 年前

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

    示例代码:

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

    上面这一行的目标是最终建立一个连接,在这里我可以得到用户发布的最大(日期)。我遇到的问题是,生成的用户列表不是用户对象列表,而是类强制转换异常。

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   Bill Leeper    15 年前

    明白了。我已经在使用HibernatedOSupport派生的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方法,我能够包含一个我渴望的获取。

        2
  •  0
  •   duffymo    15 年前

    听起来Hibernate不想让你来这里。也许您应该从simplejdbctemplate和rowmapper开始,然后从那里构建。