【问题标题】:Hibernate SET element order-by clauseHibernate SET 元素排序子句
【发布时间】:2011-11-10 07:36:15
【问题描述】:

我想知道,当 fetch=select 时,您可以在映射文件中的 SET 元素上设置 order-by 属性,但如果您在创建询问。这会安全吗?

我的意思是,他们将结果泵入一个 HashSet,我不认为那些不能保证元素顺序吗?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    Hibernate 实际上并没有将结果泵入HashSet,它会用自己的Set 实现替换任何现有的HashSet

    当你使实例持久化时,通过调用 persist(),Hibernate 实际上会用 Hibernate 自己的 Set 实现的实例替换 HashSet。

    http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html

    如果你使用 order-by 属性,那么它不会使用HashSet,可能会使用LinkedHashSet。请参阅我上面引用的同一文档中的此内容:

    如果您希望数据库本身对集合元素进行排序,请使用 set、bag 或 map 映射的 order-by 属性。该解决方案使用 LinkedHashSet 或 LinkedHashMap 实现,并在 SQL 查询中而不是在内存中执行排序。

    因此,Hibernate 将安全地维护 Set 中项目的顺序——但在创建新对象并将它们持久化时要小心。如果您在新对象中使用HashSet 而不是LinkedHashSet,那么Hibernate 会以基本上随机的顺序保存您的集合,因为HashSet 不保证元素顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多