繁体   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