我正在尝试使用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对象的列表,我得到了一个类转换异常。
希望这是足够的代码。这是我的问题的一个大大简化的版本,以及我应用程序各个部分的片段组合。
答案 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开始并从那里开始构建。