我正在尝试使用 getHibernateTemplate() 方法在 Hibernate 中编写自定义选择语句。我对生成的映射有疑问。
示例代码:
List<User> users = getHibernateTemplate().find("Select user, sysdate as latestPost from User as user");
for (User user : users) {
assertNotNull(users.name);
}
上面一行的目标是最终获得一个连接,我可以在其中获得用户发布的帖子的最大(日期)。我遇到的问题是生成的用户列表不是 User 对象列表,并且我收到类转换异常。
希望这是足够的代码。这是我的问题的一个大大简化的版本,是我的应用程序各个部分的片段的组合。
最佳答案
明白了这一点。我已经在使用 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 获取之一
关于java - 如何使用 HibernateDaoSupport 类在 Hibernate 中使用自定义 select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2669932/