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

标签 java hibernate spring

我正在尝试使用 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/

相关文章:

java - 在 spring 3/PostgreSQL 8.4.9 中从行插入中获取自动生成的键

java - 使用 yamlbeans 反序列化嵌套类

java - PropertyPlaceholderConfigurer 不适用于 ClassPathXmlApplicationContext

java - jaxWS "client"需要一种方法来跟踪原始 xml 请求和响应

java - 如何在mysql数据库中创建表时忽略实体类中的字段?

java - 考虑在您的配置中定义一个类型的 bean

java - 从 Java 创建 .BPMN2.0.xml

java - 使用 hibernate 禁用属性/集合加载

java - 如何将结果集映射到 JPA 中的自定义 POJO

java - 从导入的 jar 中加载 MessageSouce 中的消息文件