【问题标题】:@OrderColumn in JPQL queryJPQL 查询中的@OrderColumn
【发布时间】:2013-01-03 22:04:26
【问题描述】:

我有一个与@OrderColumn 的@ManyToMany 映射,如下所示:

class Tag {
    @ManyToMany(fetch = FetchType.LAZY) @Getter
    @JoinTable(
            name = "tag_graph",
            inverseJoinColumns = @JoinColumn(name = "parent_id"))
    private Set<Tag> parents = new TreeSet<>();

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "parents") @Getter @OrderColumn
    private List<Tag> children = new ArrayList<>();
}

我的问题是我想编写一个 JPQL 查询,该查询将使用生成的 @JoinTable 的 @OrderColumn。比如:

 SELECT t FROM Tag t WHERE ... ORDER BY t.ORDER_COLUMN

有没有办法做到这一点?

【问题讨论】:

    标签: jpa join many-to-many jpql


    【解决方案1】:

    您应该能够在 JPQL 中使用 INDEX 函数。

    看, http://en.wikibooks.org/wiki/Java_Persistence/JPQL#Special_Operators

    【讨论】:

      【解决方案2】:

      不需要在查询中指定 order 列,它会在后台自动使用以保留元素添加到关系列表中的顺序。如需更好的解释,您可以参考此link

      【讨论】:

      • @OrderColumn 仅在实体上自动处理,而不在我需要使用的 JPA 查询中自动处理。我需要创建特定的 JOIN/WHERE 查询,最终将按 ordercolumn 进行排序。
      • 在这种情况下,您需要自己管理这样的列,因为@OrderColumn 是不透明的,无法显式访问它。
      猜你喜欢
      • 2014-01-12
      • 2021-07-16
      • 2017-03-10
      • 2013-11-13
      • 2014-05-04
      • 2018-09-04
      • 2020-12-01
      • 2011-07-30
      • 2021-04-06
      相关资源
      最近更新 更多