在SQL模式中有下一個表結構:客戶端,僱員,訂單。 和3個相應的java代碼中的實體類:Client,Employee,Order。休眠。在一個表中有幾個外鍵
來自客戶和員工的主要id字段都在外部表中作爲外鍵。
問題是如何顯示在java代碼中? 正如我在這裏理解的那樣,應該像在@OneToMany註釋的客戶和員工中添加Set字段一樣。
但是在Order Entity中應該做什麼,也許我必須添加除@OneToMany之外的任何其他註釋?
在SQL模式中有下一個表結構:客戶端,僱員,訂單。 和3個相應的java代碼中的實體類:Client,Employee,Order。休眠。在一個表中有幾個外鍵
來自客戶和員工的主要id字段都在外部表中作爲外鍵。
問題是如何顯示在java代碼中? 正如我在這裏理解的那樣,應該像在@OneToMany註釋的客戶和員工中添加Set字段一樣。
但是在Order Entity中應該做什麼,也許我必須添加除@OneToMany之外的任何其他註釋?
我想你對Hibernate的關係映射有一些誤解。
事實上,如果你的Orders表有客戶和員工的外鍵,那麼你正在尋找的註解是@ManyToOne當你的實體必須通過有針對性的實體引用多個記錄
@OneToMany註解使用,而@ManyToOne用於你的實體只有一個記錄引用目標實體。
例如:
Orders實體有來自客戶端的一個參考和員工實體一個參考。
在這種情況下,訂單實體可以通過以下方式進行映射:
@Entity
@Table(name = "Orders")
public class Order implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
private Client client;
@ManyToOne
private Employee employee;
//getters and setters
}
@Entity
@Table(name = "Clients")
public class Client implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String attribute1;
//getters and setters
}
@Entity
@Table(name = "Employees")
public class Employee implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String attribute1;
//getters and setters
}
有了上面給出你應該能夠讓你的架構做工精細與Hibernate的例子,但便於理解,讓我們設想一個場景,您需要從客戶端獲取所有訂單,當然您可以通過查詢選擇客戶端表格中的訂單,但是Hibernate提供了@OneToMany註釋,這將使您可以訪問所有客戶訂單無需單獨查詢,只需通過映射!讓我們來看一個例子:
@Entity
@Table(name = "Orders")
public class Order implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
private Client client;
//getters and setters
}
@Entity
@Table(name = "Clients")
public class Client implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String attribute1;
@OneToMany(mappedBy = "client")
private List<Order> orders;
//getters and setters
}
在這個例子中,你應該能夠得到所有從客戶訂單剛剛通過調用「訂單」屬性的get。請注意,在@OneToMany映射中,我們將「mappedBy」屬性指定爲「客戶端」,因爲我們在客戶端和訂單之間有雙向映射,所以需要這樣做,因爲@OneToMany的簡單用法不需要此映射。
重要:當@OneToMany測繪工作,你最終會面臨一些延遲抓取的問題,在這種情況下,我強烈建議你看看這個問題:
Solve 「failed to lazily initialize a collection of role」 exception
另外,我認爲你應該開始閱讀更多關於Hibernate的瞭解它的基本概念,請查看關於@OneToMany和@ManyToOne註釋的其他問題關於休眠: