簡體   English   中英

多對多關系訂購(Java Spring)

[英]Ordering in many-to-many relation (Java Spring)

有2個與多對多關系的模型:

@Entity
public class Map {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @JsonIgnore
  private long mapId;

  @NotBlank
  private String title;

  @ManyToMany(cascade = CascadeType.ALL)
  @JoinTable(name = "route_points",
             joinColumns = @JoinColumn(name = "mapId", referencedColumnName = "mapId"),
             inverseJoinColumns = @JoinColumn(name = "pointId", referencedColumnName = "pointId"))
  private Set<Point> points;
}

@Entity
public class Point {
  @Id
  private String pointId;
  @NotBlank
  private String city;
  @ManyToMany(mappedBy = "points")
  private Set<Map> maps;
}

我必須在集合中保存點的順序並將其記錄到中間表中。 怎么做? 謝謝。

List而不是Set@OrderColumn批注結合使用:

https://docs.oracle.com/javaee/6/api/javax/persistence/OrderColumn.html

這將在route_points創建一個附加列,以跟蹤元素的順序,包括插入,刪除和重新排序。

請注意,JPA會將順序保持為連續數字,因此對列表進行的大多數(如果不是全部)結構修改將導致每個元素的更新聲明。

Set基本上不保留插入順序。 但是, LinkedHashSet將保持插入元素的順序,您可以嘗試這樣做。 它將以適當的順序將Point存儲到數據庫中,但是很可能在從數據庫中獲取后再次將其混合。 您必須在此處提供可行的選擇:

  1. 不要使用Set use List insteed。
  2. 堅持使用Set並將private Integer index字段添加到Point並存儲適當的索引-提取后就可以對其進行排序而沒有任何問題

如果確保將點以正確的順序保留在數據庫中,則可以假設您使用的是唯一,無間隔,自動生成的PK序列,則可以省略其他列並按id排序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM