我有一个带有临时表的@ManyToMany连接 表1具有0 .. *表2和表2 0 .. *表1 当我要求Table1的元素并将其序列化时。我得到一个包含Table2数组的Table1数组。 Table1的数组按主键排序。但是表1中的Array Table2是随机排序的。
如何通过主键对表1中的Table2数组进行排序?
CODE:
表1
@Table(name = "Person")
@Entity
public class PersonDetail1 extends Person implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "PERSON_ITEM", joinColumns = {@JoinColumn(name = "PERS_FK", referencedColumnName = "PERS_PK")}, inverseJoinColumns = {@JoinColumn(name = "ITEM_FK", referencedColumnName = "ITEM_PK")})
private Set<Item> items;
}
表2
@Entity
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ITEM_PK")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "PERSON_ITEM", joinColumns = {@JoinColumn(name = "ITEM_FK", referencedColumnName = "ITEM_PK")}, inverseJoinColumns = {@JoinColumn(name = "PERS_FK", referencedColumnName = "PERS_PK")})
private Set<PersonDetail1> personen;
}
获取Table1
@Override
public List<PersonDetail1> getPersonen() throws DetailException {
TypedQuery<PersonDetail1> q = em.createQuery("SELECT x from PersonDetail1 x", PersonDetail1.class);
return q.getResultList();
}
获取序列化对象
@GET
@Path("/personen")
@Produces(MediaType.APPLICATION_JSON)
@Override
public Response getPersonen(){
return Response.status(Response.Status.OK).entity(persService.getPersonen()).build();
}
答案 0 :(得分:0)
如果我正确理解了您的要求,您希望Collection
中的Items
PersonDetail1
已排序。
您可以使用OrderBy
注释或OrderColumn
注释。
OrderBy
可用于动态排序,这意味着将在查询结果上进行排序。
OrderColumn
可用于持久排序 - 项目的顺序将存储在Item
表的列中。持久性排序有一些怪癖,因此对于大多数需求,我会选择OrderBy
:
我有点怀疑订购会对常规Set
的内容产生任何影响。您可能希望使用排序Collection
的实施,例如SortedSet
。
@OrderBy("id ASC")
private Set<Item> items;
默认排序为ASC
,因此您无需明确编写,我这样做是为了说明目的。