![](/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.