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的主要内容,如果未能解决你的问题,请参考以下文章