2016-11-20 61 views
1

的映射如下(爲示出映射的圖像的鏈接,還提供):如何顯示2個不同的類型2個的實體類之間的映射的,保持彼此的基準的2個表(Department和Employee)之間

  • 每個部門都有一個且只有一個部門負責人。
  • 每個部門可以有多個員工。
  • dept_id和empId是它們各自表的主鍵。
  • dept_head(它是員工ID)和部門是其各自表 的外鍵。

Mapping Employee and Department table

我創建實體類爲上述2個表(該結構在下文提供)。

Employee類:

public class Employee implements Serializable { 

private static final long serialVersionUID = 1L; 

@Id 
@Column(name = "empId") 
private Integer empId; 
@Size(max = 45) 
@Column(name = "name") 
private String name; 
@Size(max = 45) 
@Column(name = "address") 
private String address; 
@Size(max = 45) 
@Column(name = "grade") 
private String grade; 
@Size(max = 45) 
@Column(name = "email") 
private String email; 

@JoinColumn(name = "dept", referencedColumnName = "dept_id") 
@ManyToOne 
private Department deptartment; 
.. ... 
} 

系類:

public class Department implements Serializable { 

private static final long serialVersionUID = 1L; 
@Id 
@Basic(optional = false) 
@NotNull 
@Size(min = 1, max = 8) 
@Column(name = "dept_id") 
private String deptId; 
@Size(max = 45) 
@Column(name = "name") 
private String name; 

@JoinColumn(name = "dept_head", referencedColumnName = "empId") 
@OneToOne 
private Employee deptHead; 

@OneToMany(mappedBy = "deptartment") 
private List<Employee> employeeList; 
.... 
... 
} 

如果我在Employee類添加的mappedBy(就像我在部門所做的那樣),以示EMPID之間OneToOne映射和deptHead,代碼正在編譯和運行。但是,如果我不在Employee類中添加mappedBy語句,如上面的代碼所示,代碼仍然編譯並運行良好。

我想知道爲什麼上面的代碼工作,即使我不提供僱員類的mappedBy。

如果有人能夠幫助我清除上述疑惑,並解釋其工作背後的邏輯將是偉大的,因爲我是新手。

回答

0

您試圖在沒有mappedBy屬性的情況下嘗試使用它的位置並不十分清楚。

但是,如果我正確地得到你的問題,你問爲什麼你可以只有一方或雙方註釋?

這取決於哪一方是您的關係的來源和目的地,或者它是雙向的。在Java方面,由於對象引用,您可以在兩個方向上始終保持關係,但在數據庫方面,您可能只有一個方向。

查看該主題的JPA Wiki book瞭解更多詳情。

另外,對於OneToOne狀態的API文檔:

指定單值關聯到具有 一個對一多重另一個實體。通常不需要明確指定關聯的目標實體,因爲通常可以根據所引用的對象的類型推斷出 。如果雙向關係爲 ,非擁有方必須使用OneToOne批註的mappedBy元素來指定擁有方的關係字段或屬性 。

相關問題