【问题标题】:@OrderBy ignored by hibernate & eclipselink?@OrderBy 被休眠和 eclipselink 忽略?
【发布时间】:2012-05-21 13:35:51
【问题描述】:


我正在使用@ElementCollection 测试@OrderBy,但它似乎不起作用。 我检索拥有元素集合的实体并打印集合,它没有对任何东西进行排序..

@Entity
public class AtAsOverride

@ElementCollection(fetch = FetchType.LAZY)
@Column(name = "Strings")
@OrderBy(value="stringuri desc") // tried everything: without any value, strings, stringuri ..
private List<String> stringuri;

Query qq = em.createQuery("Select a from AtAsOverride a");
System.out.println(AtAsOverride.class.cast(qq.getResultList().get(0)).getStringuri());

【问题讨论】:

  • 您将不得不提供更多信息。至少,映射 sn-p 显示集合及其注释怎么样?
  • 你去,我编辑了这个问题。这是正常的映射。
  • stringuri 不是集合中的元素,因此可能是问题所在 - 如果您打开 EclipseLink 登录,我相信您会收到一条警告,指出在处理 AtAsOverride 实体时出现的问题。尝试仅使用 OrderBy 而不尝试指定字段。
  • 正如描述所说,我尝试了所有排列 :) // 尝试了一切:没有任何值,字符串,stringuri ..

标签: hibernate sorting sql-order-by eclipselink


【解决方案1】:

EclipseLink 的最新版本允许在基本 ElementCollections 上使用 @OrderBy("desc") 和 @OrderBy("asc")。 以前这会被忽略。

试试最新版本。

【讨论】:

    【解决方案2】:

    只需使用@OrderBy("desc") 或@OrderBy("asc"),因为它是原始类型。它应该可以工作。

    【讨论】:

      【解决方案3】:

      根据 JPA 规范,基本类型的 ElementCollection 上的 @OrderBy (这是您所拥有的)不应指定任何值。意思是,它应该是:

      @ElementCollection(fetch = FetchType.LAZY)
      @Column(name = "Strings")
      @OrderBy
      private List<String> stringuri;
      

      这应该表明“排序将按基本对象的值”。这在第 11.1.38 节中进行了介绍

      【讨论】:

      • 谢谢。但是如果你想要 DESC 呢?
      • 规范没有涵盖。根据其他人已经指出的内容,EclipseLink 似乎添加了一些允许@OrderBy("desc") 的功能。 Hibernate 没有这种能力
      • 好吧,我在数据库中按 desc 顺序添加了值,我把 @OrderBy 简单了,但仍然没有运气。
      • 这显然不是 Hibernate 和 EclipseLink 的问题跟踪器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 2011-12-11
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多