多对多关系中的排序(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
useList
insteedSet
并将private Integer index
字段添加到点
并存储适当的索引-您将能够在获取后对其进行排序,而不会出现任何问题如果您确保点将以正确的顺序保留到数据库中,那么您可以添加额外的列并按
id
排序,假设您使用的是唯一、无间隙、自动生成的PKs序列将列表
与@OrderColumn
注释结合使用,而不是集合
:
这将在route_points
中创建一个附加列,以跟踪元素的顺序,包括插入、删除和重新排序
请注意,JPA将保持顺序为连续数字,因此对列表的大多数(如果不是全部)结构修改将导致每个元素的更新语句 “若您确保这些点将以正确的顺序持久化到数据库中,那个么您可以添加额外的列并按id排序”-不,不是真的。您似乎假设OP永远不会在列表中间插入一个新的<代码>点>代码>一旦创建了代码> map 。此外,插入顺序是一个实现细节,我认为JPA规范不保证插入顺序