【问题标题】:How to create a query connecting two tables using hibernate如何使用休眠创建连接两个表的查询
【发布时间】:2015-07-10 05:54:33
【问题描述】:

我有以下两个名为wc_content_definitionsimple_web_content 的表以及与这些表相对应的两个pojo,即WebContentDefinitionSimpleWebContent。我使用的数据库是 PostgreSQL 。现在我正在尝试编写一个查询,将两个表与 simple_web_content 表中的一个字段和 wc_content_definition 表中的所有字段连接起来。 我现在使用的查询是:

select wc.*,swc.content_data from wc_content_definition wc, simple_web_content swc where swc.web_content_definition_id = wc.web_content_definition_id and wc.web_content_definition_id = 491 and wc.site_id = 9 order by swc.version_number desc ;

我正在尝试实现一个休眠查询而不是这个。 pojo 中与content_data 列对应的字段名称为simpleWebContentData。我目前的实现如下:

public Object[] getDocLibContentByContentId(int contentId, int siteId) throws HibernateException
{
    Session session = getCurrentSession();
    String sql = "select wc.*,swc.content_data from wc_content_definition wc, simple_web_content swc where swc.web_content_definition_id = wc.web_content_definition_id and wc.web_content_definition_id = :contentId and wc.site_id = :siteId order by swc.version_number desc ";
    SQLQuery query = session.createSQLQuery(sql);
    query.setParameter("contentId", contentId);
    query.setParameter("siteId", siteId);
    List<Object[]> results = query.list();
    if (results != null && !results.isEmpty())
    {
        return results.get(0);
    }
return null;
}

我创建了一个名为SimpleWebContentHB 的新类,它有两个字段simpleWebContentDataWebContentDefinition。有什么方法可以运行正确的休眠查询并获得返回类型为SimpleWebContentHB

【问题讨论】:

  • 你现在得到的是一个包含 wc_content_definition 和 simple_web_content.swc.content_data 的所有字段的数组。但我想你想得到一个 WebContentDefinition 对象和 content_data 值?
  • 是的,这正是我要找的,我创建了一个包含这两个名为 SimpleWebContentHb 的类,试图获得该类型的返回

标签: java hibernate postgresql


【解决方案1】:

一个好主意是创建一个HQL 查询而不是SQL 查询。 它允许您检索对象而不是所有列的简单值。

String hql = "select w, s.simpleWebContentData 
    from WebContentDefinition w, SimpleWebContent s 
    where ...";
Query query = session.createQuery(hql);
query.setParameter("contentId", contentId);
query.setParameter("siteId", siteId);
List<Object[]> results = query.list();
if (results != null && !results.isEmpty()) {
    WebContentDefinition w = (WebContentDefinition)results[0];
    String data = (String)results[1];
}

【讨论】:

  • 看来这就是我要找的东西,谢谢,让我试试这个,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 2013-01-11
相关资源
最近更新 更多