JPQL 查询中的@OrderColumn

Posted

技术标签:

【中文标题】JPQL 查询中的@OrderColumn【英文标题】:@OrderColumn in JPQL query 【发布时间】: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

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

@OrderColumn 仅在实体上自动处理,而不在我需要使用的 JPA 查询中自动处理。我需要创建特定的 JOIN/WHERE 查询,最终将按 ordercolumn 进行排序。 在这种情况下,您需要自己管理这样的列,因为@OrderColumn 是不透明的,无法显式访问它。

以上是关于JPQL 查询中的@OrderColumn的主要内容,如果未能解决你的问题,请参考以下文章

JPQL 查询列表中的参数

联接表中的 JPQL 查询

JPQL 中的 LIMIT 子句替代方案是啥?

我可以限制使用 JPQL 命名查询的 Spring Data 查询方法的查询结果吗?

正确的表达式不是 JPQL/HQL 查询中的有效表达式

JPQL 查询参数中的时间戳未转换为 UTC