0

我有一个查询,它从 2 个不同的表中聚合和分组:

SELECT co.name AS companyName, f.destination_id, COUNT(f.id) AS numberOfFlights FROM companies co INNER JOIN flights f ON co.c_id = f.company_id GROUP BY co.id, co.name , f.destination_d

而且,我想将它作为命名查询保存在 xml 映射文件中。我的问题是: 1. 虽然如您所见,并非所有结果字段都是任何表中的实际列 - 我如何将其告知地图文件?2. 我应该将它保存在哪个 xml 中 - 在 compant.hbm.xml 或 flight.hbm.xml 上,或者 - 有没有办法将它保存在 hibernate.cfg.xml 中?

我在网上搜索了高级示例,但找不到任何与这种并发症相匹配的东西(尽管它并不那么复杂......)。

谁能给我一个可以学习的好例子,或者可以自己指导我吗?

4

3 回答 3

3

对于问题 1,看一下 ResultTransformer。只需创建一个与查询结果同名的 bean,然后在 Transformers.aliasToBean 调用中将其传递给 ResultTransformer,如下所述: Hibernate: Mapping custom column names in stored procedure named query

对于问题 2,至少在我们的项目中,我们一直将命名查询放入一个仅包含查询的 XML 文件中,并使用以下行从 hibernate.cfg.xml 中引用它:

<mapping resource="queries.hbm.xml" />
于 2011-07-18T20:04:13.780 回答
1

我使用 JPA,我相信 Hibernate 也支持它,只需在 META-INF 下的合适目录中创建一个 XML 文件,然后从我的 persistence.xml 中引用它

<persistence-unit name="xxx">
    <jta-data-source>jdbc/xxx</jta-data-source>
    <mapping-file>META-INF/jpql/Xxx.xml</mapping-file>

当我有诸如您的计数之类的“额外”数据时,我经常使用合适的 cnmstructor 定义一个结果类,然后使用

  select new MyClass( thing, computedValue etc ...)

在我的查询中。Hibernate 似乎支持这种方法。

于 2011-07-18T07:52:46.780 回答
0

如果您使用XML映射或带有注释( http://download.oracle.com /javaee/6/api/index.html?javax/persistence/NamedQuery.html)如果您使用注释。

另一种选择,尤其是当您将查询中的元素与其他映射连接时,是创建一个数据库,在 Hibernate 中查看它的映射。

于 2011-07-18T11:08:32.750 回答