我有兩個主表和一個用于多對多關系的映射表。我想在 PACKAGE_ACTION_MAPPING 表 Id 列上應用 @OrderBy("ID ASC") 。但是當我使用@OrderBy("ID ASC") 時,排序應用于 Int_Action Id 列而不是 PACKAGE_ACTION_MAPPING Id 列。
CREATE TABLE INT_PACKAGE (
ID BIGINT PRIMARY KEY AUTOINCREMENT,
NAME VARCHAR (32) NOT NULL
);
CREATE TABLE INT_ACTION (
ID BIGINT PRIMARY KEY AUTOINCREMENT,
NAME VARCHAR (32) NOT NULL
);
CREATE TABLE PACKAGE_ACTION_MAPPING (
ID BIGINT PRIMARY KEY AUTOINCREMENT,
PACKAGE_ID BIGINT REFERENCES INT_PACKAGE(ID),
ACTION_ID BIGINT REFERENCES INT_ACTION(ID)
);
Java中的物體類:
@Entity
@Table(name = "INT_PACKAGE")
public class IntPackage {
@Id
private Long id;
private String name;
@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(name = "PACKAGE_ACTION_MAPPING", joinColumns = {
@JoinColumn(name = "PACKAGE_ID") }, inverseJoinColumns = { @JoinColumn(name = "ACTION_ID") })
@OrderBy("ID ASC")
private List<IntAction> actions;
//getters setters
}
@Entity
@Table(name = "INT_ACTION")
public class IntAction {
@Id
private Long id;
private String name;
@JsonIgnore
@ManyToMany(mappedBy = "actions")
private List<IntPackage> intPackage;
//getter setters
}
請建議一些方法來實作它。
uj5u.com熱心網友回復:
我建議您使用 aSortedSet代替對資料庫進行排序并使類具有可比性。
@Entity
@Table(name = "INT_PACKAGE")
public class IntPackage {
@Id
private Long id;
private String name;
@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(name = "PACKAGE_ACTION_MAPPING", joinColumns = {
@JoinColumn(name = "PACKAGE_ID") }, inverseJoinColumns = { @JoinColumn(name = "ACTION_ID") })
private SortedSet<IntAction> actions;
//getters setters
}
@Entity
@Table(name = "INT_ACTION")
public class IntAction implements Comparable<IntAction> {
@Id
private Long id;
private String name;
@JsonIgnore
@ManyToMany(mappedBy = "actions")
private List<IntPackage> intPackage;
//getter setters
public int compareTo(IntAction other) {
return Integer.compare(id, other.id);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/336548.html
標籤:爪哇 休眠 jpa sql-order-by
上一篇:JPA回滾嵌套事務
