我继承了一个包含一些模型的代码库以及实现对它们进行排序的请求。由于我不是 hibernate 专家,所以我很困惑。
(请原谅伪代码)
class Event {
@OneToMany(mappedBy="event", fetch=FetchType.LAZY)
@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
private List<Attendee> attendees = new ArrayList<Attendee>(50);
}
class Attendee {
@ManyToOne
@JoinColumn(name="event_id")
private Event event;
@ManyToOne
@JoinColumn(name="person")
private Person person;
}
class Person {
private string lastName;
private string firstName;
}
我希望能够按人员的姓氏/名字对 Activity 的参加者列表进行排序,但我不知道如何使用中间的表格来执行此操作。我发现许多在线引用资料在没有中间表的情况下也能很好地工作。我尝试过使用(在 Event 类中):
@OrderBy("attendee.person.lastName")
@OrderBy("person.lastName")
在参加者类中:
@OrderBy("attendee.lastName")
@OrderBy("lastName")
没有任何运气。有没有人有任何可能有洞察力的建议或引用?如果有帮助或者有任何问题有助于深入挖掘,我可以发布实际详细信息。
最佳答案
我认为唯一的方法是
- 执行专用 HQL 请求以获取 Activity 的所有参加者:
从参加者中选择一个内部联接 fetch a.person p where a.event = :event order by p.lastName, p.firstName
- 在 Event 中有一个方法,该方法返回参加者列表的副本,并使用专用比较器进行排序。
关于java - 是否可以让 Hibernate 通过 ManyToMany 关系执行 OrderBy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261966/