hibernate属性公式如何获得超过1行?

时间:2009-10-28 11:38:06

标签: hibernate properties formula

在hibernate映射文件中,我使用属性公式来获取任何值。

<property name="price" type="double" formula="(select SUM(amount) ...) />

但它只允许获得1行。我怎样才能满足行? 我理解“属性”不合适,但是无法添加公式来设置或列出。

当然我只想在不添加新类的情况下获取值。 我只是有sql请求,并希望获得列表或为现有类设置。

3 个答案:

答案 0 :(得分:1)

公式属性仅对当前行有效。如果要执行聚合函数,则需要编写特定查询以获取它们。请参阅section of the hibernate docs that handle aggregate functions

答案 1 :(得分:1)

如果您的公式返回多行,则需要将语句与实体标识符链接,例如:

选择列名称
来自 其中 .identifier = entity_identifier

关于将此应用于一组值,可能可以应用按功能分组。我曾经使用mysql的group_concat来显示值列表。不好的是,该公式与mysql本地方言相结合,但它有效。

答案 2 :(得分:0)

公式仅适用于单值属性;不是收藏品。但是,您可以指定custom SQL statement to be used for loading a collection

这里棘手的部分是,你的问题听起来像你想要的是一组元素(double价格)而不是实体;我从未尝试过指定自定义加载器  对于类似的东西,所以不确定它是否会起作用。文档在这个问题上相当沉默。

如果上述方法不起作用,另一个选择是将SELECT定义为视图并以此方式映射集合(同样,作为元素集合)。

最后,您还可以运行skaffman建议的查询。您需要在适当时手动调用该查询并在您的实体上填充集合(例如,在加载实体后在您的DAO中),您可以define an appropriate listener并在那里执行。