我有一个与自身有1:n关系的实体:
@Entity
@Table(name = "\"group\"")
class Group {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Integer id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "parentGroup")
@JoinTable(
inverseJoinColumns = {@JoinColumn(name = "parentgroup_id", referencedColumnName = "id", updatable = false)}
)
@OrderColumn
List<Group> groups = new ArrayList<>();
}
如果我使用JPA查询
select g from Group g where g.id = ?
我得到了一个有序的子组列表。
如何获取父组的有序列表,以便以下查询返回没有父组的所有组的有序列表?
select g from Group g where g.parentGroup is null
我知道不可能为此使用JPA。
我不想打破现有儿童群体的排序,如果我决定发明一个新的专栏,我就会这样做。
我想订购父组,可能使用现有的列&#34; groups_order&#34;这是由JPA为子组生成的。
这个问题是否存在精益解决方案?
如果重要的话,我正在使用带有EclipseLink和Spring Data JPA的JPA 2。
答案 0 :(得分:0)
是的,有一种方法:在生成@OrderColumn
列后,将@OrderBy("groupsOrder")
替换为groups_order
:
@Column(name="groups_order")
private int groupsOrder;//it may be not necessarily to expose this field within a public getter
当然,在检索父组时,您需要按照kostja的解释进行排序:
SELECT g FROM Group WHERE g.parentGroup is null ORDER BY g.groupsOrder