![](/img/trans.png)
[英]Spring hibernate : Persisting an entity with many-to-many relation and a composite key
[英]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
存儲到數據庫中,但是很可能在從數據庫中獲取后再次將其混合。 您必須在此處提供可行的選擇:
Set
use List
insteed。 Set
並將private Integer index
字段添加到Point
並存儲適當的索引-提取后就可以對其進行排序而沒有任何問題 如果確保將點以正確的順序保留在數據庫中,則可以假設您使用的是唯一,無間隔,自動生成的PK序列,則可以省略其他列並按id
排序
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.