在hibernate映射文件中,我使用属性公式来获取任何值。hibernate属性公式如何获得多于1行?
<property name="price" type="double" formula="(select SUM(amount) ...) />
但它只允许获得1行。我如何获得行的lisf? 我知道“财产”不适合,但不可能添加公式来设置或列出。
当然,我只想在不添加新类的情况下获取值。 我只是有SQL请求,并期望获得列表或设置为存在的类。
在hibernate映射文件中,我使用属性公式来获取任何值。hibernate属性公式如何获得多于1行?
<property name="price" type="double" formula="(select SUM(amount) ...) />
但它只允许获得1行。我如何获得行的lisf? 我知道“财产”不适合,但不可能添加公式来设置或列出。
当然,我只想在不添加新类的情况下获取值。 我只是有SQL请求,并期望获得列表或设置为存在的类。
公式属性仅对当前行进行操作。如果你想执行集合函数,你需要编写一个特定的查询来获取它们。请参阅section of the hibernate docs that handle aggregate functions。
是的,我可以写一个查询返回更多的1行,但我怎么能将这个结果存储在我的课堂? 而我想在我的类的映射xml文件中设置此查询。 – 2009-10-28 11:47:27
你不能,那就是我所说的。您不能拥有包含多行数据的行的属性,这是没有意义的。 – skaffman 2009-10-28 12:08:29
我并不是说我想要的是属性。让它成为列表或设置或别的东西,无所谓,但如何? – 2009-10-28 12:22:54
公式仅适用于单值属性;而不是集合。但是,您可以指定custom SQL statement to be used for loading a collection。
这里棘手的部分是,从你的问题,它听起来像你想要的是一组元素(价格double
),而不是实体;我从来没有试图指定自定义加载器 这样的事情,所以我不知道它是否会工作。文档在这个问题上相当沉默。
如果上述不起作用,另一种选择是将您的SELECT
定义为视图和地图集合(再次,作为元素的集合)。
最后,您还可以运行建议如skaffman
的查询。您需要调用该查询并在适当的时候手动在您的实体上填充集合(例如,在实体加载后您的DAO中)ro可以define an appropriate listener并在那里执行。
如果你的公式返回多行,你需要的声明与实体标识符链接,例如:
选择列名
从表 其中表 .identifier = entity_identifier
关于将此应用于一组值,可能是按功能分组。我曾经使用过mysql的group_concat来显示值的列表。坏事情是这个公式与mysql本地方言相结合,但它工作。
很高兴有关于group_concat功能的知识。感谢您发布该建议。 – 2012-09-03 06:47:15
听起来像你真的想有1:m的引用,没有一个'正确的'参考字段。 这是正确的吗? – 2009-10-28 11:45:36
好吧,我需要给我的班级添加一个列表。它将仅用于显示有关此对象的任何其他信息。而这个表格没有覆盖映射文件,因为它们被另一个应用程序使用。 – 2009-10-28 12:17:55