实体层面的JPA实体的顺序

时间:2014-01-15 10:27:21

标签: jpa eclipselink spring-data-jpa

我有一个与自身有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。

1 个答案:

答案 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