Java 如何将项目排序HQL转换为筛选查询?

Java 如何将项目排序HQL转换为筛选查询?,java,hibernate,hql,filtering,Java,Hibernate,Hql,Filtering,我有一个疑问: sess.createQuery("from Box b join b.items bi order by bi.name").list() 它很好用。 不过,我有一个hibernate的收集框,想过滤的是。 天真的尝试: sess.createFilter(boxes, "join this.items bi order by bi.name").list() sess.createFilter(boxes, "from this join this.items bi o

我有一个疑问:

sess.createQuery("from Box b join b.items bi order by bi.name").list()
它很好用。 不过,我有一个hibernate的收集框,想过滤的是。 天真的尝试:

 sess.createFilter(boxes, "join this.items bi order by bi.name").list()
 sess.createFilter(boxes, "from this join this.items bi order by bi.name").list()
不要工作

将此HQL转换为筛选器的正确方法是什么?

在编写时,
引用集合元素

你可以这样写:

sess.createFilter(boxes, "where this.name = ?").list();
也就是说,我在你的例子中没有看到任何条件。我不确定集合筛选器中是否允许使用
order by
(尚未尝试),但如果您只想对集合元素进行排序,则可以通过注释指定排序顺序:

@OrderBy("name")
private List items;
试试看


不,我不能写这样的东西,因为我不能那么容易地引入连接。你真正的意思是“按此.项目.名称订购”,但它不起作用。不,我不能通过@OrderBy指定排序顺序,因为这是一个顺序,而不是顺序:每次都不同。您可以在过滤器中使用order by。对不起,我误解了您的问题。因此,您试图通过集合自身集合元素的属性对集合进行排序—这不会作为筛选器的一部分工作。老实说,我不太清楚为什么它会有意义——如果一个“盒子”中有A和B项,而另一个有A和C项,那么结果的排序将是随机的。我已经重写了这个查询,使其仍然是一个查询,虽然很难看,但它确实有效。理智的问题是另一个问题。呵呵,我觉得自己像那些在雅虎问答博客上的青少年一样愚蠢。
session.createFilter(items.getBoxes(), "order by this.name").list()