Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多对多关系中的排序(Java Spring)_Java_Database_Spring_Jpa_Spring Data Jpa - Fatal编程技术网

多对多关系中的排序(Java Spring)

多对多关系中的排序(Java Spring),java,database,spring,jpa,spring-data-jpa,Java,Database,Spring,Jpa,Spring Data Jpa,有两种模型与多对多相关: @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",

有两种模型与多对多相关:

@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;
}
@实体
公共类地图{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@杰索尼奥雷
私有长mapId;
@不空白
私有字符串标题;
@多个(级联=级联类型.ALL)
@JoinTable(name=“route_points”,
joinColumns=@JoinColumn(name=“mapId”,referencedColumnName=“mapId”),
inverseJoinColumns=@JoinColumn(name=“pointId”,referencedColumnName=“pointId”))
私人设定点;
}
@实体
公共课点{
@身份证
私有字符串pointId;
@不空白
私人城市;
@许多(mappedBy=“点”)
私有集映射;
}

我必须在集合中保存点的顺序,并将其记录到中间表中。如何做到这一点?Thx.

集合
基本上不保持插入顺序
LinkedHashSet
将保持元素的插入顺序,您可以尝试这样做。它将以适当的顺序将
存储到数据库中,但很可能在从数据库中提取后再次混淆。您必须在此处选择可行的选项:

  • 不要使用
    Set
    use
    List
    insteed
  • 坚持使用
    Set
    并将
    private Integer index
    字段添加到
    并存储适当的索引-您将能够在获取后对其进行排序,而不会出现任何问题

  • 如果您确保点将以正确的顺序保留到数据库中,那么您可以添加额外的列并按
    id
    排序,假设您使用的是唯一、无间隙、自动生成的PKs序列

    列表
    @OrderColumn
    注释结合使用,而不是
    集合

    这将在
    route_points
    中创建一个附加列,以跟踪元素的顺序,包括插入、删除和重新排序


    请注意,JPA将保持顺序为连续数字,因此对列表的大多数(如果不是全部)结构修改将导致每个元素的更新语句

    “若您确保这些点将以正确的顺序持久化到数据库中,那个么您可以添加额外的列并按id排序”-不,不是真的。您似乎假设OP永远不会在列表中间插入一个新的<代码>点>代码>一旦创建了代码> map 。此外,插入顺序是一个实现细节,我认为JPA规范不保证插入顺序