在休眠映射文件中,我使用属性公式来获取任何值。
<property name="price" type="double" formula="(select SUM(amount) ...) />
但它只允许获得 1 行。我怎样才能得到行的 lisf?我知道“属性”不合适,但不可能将公式添加到集合或列表中。
当然,我只想在不添加新类的情况下获取值。我只有 sql 请求,并希望获取现有类的列表或设置。
在休眠映射文件中,我使用属性公式来获取任何值。
<property name="price" type="double" formula="(select SUM(amount) ...) />
但它只允许获得 1 行。我怎样才能得到行的 lisf?我知道“属性”不合适,但不可能将公式添加到集合或列表中。
当然,我只想在不添加新类的情况下获取值。我只有 sql 请求,并希望获取现有类的列表或设置。
如果您的公式返回多行,则需要将语句与实体标识符链接,例如:
从table .identifier = entity_identifier的表
中选择列名
关于将此应用于一组值,也许可以按功能分组。例如,我曾经使用 mysql 中的 group_concat 来显示值列表。不好的是,公式与 mysql 本地方言耦合,但它起作用了。
公式属性仅对当前行起作用。如果要执行聚合函数,则需要编写特定的查询来获取它们。请参阅处理聚合函数的休眠文档部分。
公式仅适用于单值属性;不要收藏。但是,您可以指定用于加载集合的自定义 SQL 语句。
这里棘手的部分是,从您的问题来看,您想要的是元素(double
价格)而不是实体的集合;我从来没有尝试为类似的东西指定自定义加载器,所以不确定它是否会起作用。文档在这个问题上相当沉默。
如果上述方法不起作用,另一种选择是以SELECT
这种方式将您定义为视图和地图集合(再次,作为元素集合)。
最后,您还可以运行类似skaffman
建议的查询。您需要在适当的时候(例如在加载实体后在您的 DAO 中)调用该查询并在您的实体上手动填充一个集合,您可以定义一个适当的侦听器并在那里执行此操作。