【问题标题】:Hibernate ordering in sqlsql中的休眠排序
【发布时间】:2012-08-26 07:29:26
【问题描述】:

是否可以在不使用SortedSet 接口、不使用@OrderBy 注释的情况下使用休眠在sql 中对Set 集合进行排序——只使用条件的addOrder。

我试过了,它添加了 order by 子句,但集合没有排序。

我使用休眠 3.4。

【问题讨论】:

    标签: hibernate jpa fluent-nhibernate jpa-2.0 hibernate-mapping


    【解决方案1】:

    如果您将“Set”更改为“List”并将“List”中不存在的方法放入等效项,我们将正常工作。

    问候,

    【讨论】:

    • 由于其他一些原因,我需要在那里设置一个集合。
    【解决方案2】:

    NHibernate 集合没有“顺序”,即使集合映射支持排序依据。见 Ayende 的explanation

    请注意,[order-by] 不适用于泛型集合,一般来说, 你不想依赖那些排序属性,你想使用 所选集合的自然属性。集是,由 定义,无序的唯一元素集。

    您可以将 order by 子句附加到底层 SQL,但是当 NHibernate 构建集合时该顺序会丢失。当然,使用“有序”集合或其他集合类型(袋子或列表)也可以。

    【讨论】:

    • 是的,我知道。我也用 nhibernate 添加了这个问题,尽管事实上我正在使用 java,因为我对这个主题有点绝望。当我用 @OrderBy 注释对 Set 进行注释时,我得到了排序集(我怀疑 hibernate 使用了一些排序的实现),但是......如果我没有注释该字段并且只在条件中添加排序,那么返回的 Set 不是排序。在这两种情况下,生成的 sql 查询都是相同的。所以结论是使用OrderBy注解强制hibernate使用SortedSet实现,但是我不想默认使用这个注解。
    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2020-01-18
    • 2019-07-16
    • 2012-10-24
    • 2010-12-27
    相关资源
    最近更新 更多