在hibernate映射文件中,我使用属性公式来获取任何值。
<property name="price" type="double" formula="(select SUM(amount) ...) />
但它只允许获得1行。我怎样才能满足行? 我理解“属性”不合适,但是无法添加公式来设置或列出。
当然我只想在不添加新类的情况下获取值。 我只是有sql请求,并希望获得列表或为现有类设置。
答案 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并在那里执行。