當@ManyToOne
引用非主鍵字段時,我發現了一個奇怪的行爲。@ManyToOne referencedColumnName到UniqueField但不是PrimaryKey
部分。 1個參考不PrimaryKey的
數據庫表:
Sessions
ID number (pk)
SESSIONID varchar (unique, not null)
History
ID number (pk)
SESSIONID varchar (fk to Sessions.SESSIONID)
Entityes:
@Entity
@Table(name = "[email protected]_DB_LINK", schema = "ESAD_OWNER",
uniqueConstraints = {@UniqueConstraint(columnNames = {"sessionid"})})
public class Sessions implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "ID")
private BigInteger id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 40)
@Column(name = "SESSIONID", unique = true)
private String sessionid;
@OneToMany(mappedBy = "session", fetch = FetchType.LAZY)
private List<History> history;
.........
}
@Entity
@Table(name = "[email protected]_DB_LINK", schema = "ESAD_OWNER")
public class History implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "ID")
private BigInteger id;
@ManyToOne
@JoinColumn(name = "SESSIONID", referencedColumnName = "SESSIONID")
private Sessions session;
..........
}
代碼:
List<History> hsLazy = sessions.getHistory();//Nothing select
for (History hsLazy1 : hsLazy) { //*
System.out.println(hsLazy1.getId());
}
* 一個選擇歷史WHERE SESSIONID =?
多選擇工作階段WHERE SESSIONID = ?,中的子表中記錄歷史SELECT =計計數
PART.2參考PrimaryKey的
數據庫表:
Sessions
ID number (pk)
SESSIONID varchar (unique, not null)
History
ID number (pk)
SESSIONID number(fk to Sessions.ID)
實體:更改歷史記錄爲
@Entity
@Table(name = "[email protected]_DB_LINK", schema = "ESAD_OWNER")
public class History implements Serializable {
private static final long serialVersionUID = 1L;
..........
@ManyToOne
@JoinColumn(name = "SESSIONID", referencedColumnName = "ID",
nullable=false)
private Sessions session;
..........
代碼:
List<History> hsLazy = sessions.getHistory();//Nothing select
for (History hsLazy1 : hsLazy) { //*
System.out.println(hsLazy1.getId());
}
* ONE選擇史的SessionID
爲什麼休眠產生不同數量的查詢時@ManyToOne參考不PrimaryKey的和參考的PrimaryKey? 爲什麼這麼發生? 當沒有引用PK時,是否可以改變行爲?
P.S. JPA 2.0休眠4.2.5
mmmm ...什麼?你能更清楚地解釋你問什麼? –