@Entity
@Table(name="empoyee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@ManyToOne
@JoinColumn(name="department_id", referencedColumnName="id")
private Department department;
@ManyToOne
@JoinColumn(name="project_id", referencedColumnName="id")
private Project projects;
@OneToOne(mappedBy="employee")
private ParkingLot parkingLot;
//Other properties,constructors, getters and setters and so on
}
@Entity
@Table(name="department")
public class Department implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@OneToMany(mappedBy="department")
private List<Employee> employees;
//Other properties,constructors, getters and setters and so on}
@Entity
@Table(name="parking_lot")
public class ParkingLot implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@OneToOne
@JoinColumn(name="employee_id",referencedColumnName="id")
private Employee employee;
//Other properties,constructors, getters and setters and so on}
@Entity
@Table(name="project")
public class Project implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@OneToMany(mappedBy="project")
private List<Employee> employees;
//Other properties,constructors, getters and setters and so on
}
リレーションシップが単方向の場合、実際には所有側はなく、mappedBy アノテーションはありません。リレーションシップが双方向の場合、mappedBy アノテーションを持つ側があり、反対側は所有側です。所有側は、関係を所有する側です。したがって、この用語は、ParkingLot がその従業員を所有している、または Employee がその ParkingLot を所有しているように適用されるのではなく、ParkingLot と Employee の関係が従業員によって所有されているように適用されます (または、以下の ParkingLot を参照)。ManyToOne の場合、mappedBy は存在しないため、関係を所有するのは常に OneToMany アノテーションで指定されたエンティティです (たとえば、プロジェクト テーブルはすべての従業員への外部キーを持つことができないため、意味があります)。あなたの例ではOneToManyマッピングはありません どちらの側が関係を所有するかを選択することはできません。従業員と駐車場の間で選択肢があり、私は駐車場を選びました。選択肢が与えられたとき、それは何を意味しますか? 主な違いは、mappedBy にはプロパティ カスケードがあることです。どのテーブルが外部キーを持っているか、またはリレーションシップが独自のテーブルにあるかどうかは問題ではないことに注意してください - JPA はすべてのケース (@InverseJoinColumn など) をサポートします。
双方向マッピングの場合、マッピングの明確なターゲットとソースはありません。どちらからマッピングするかによって異なります。この用語は単方向マッピングにより適用され、ソース側はもちろんマッピングを持つエンティティです (つまり、ターゲット エンティティの知識です)。
4) 該当なし (ParkingLot と Employee の関係を一方向にしない限り)。5) 関係の所有者は常に「1 つの実体上」にある 6) 逆側
最後の注意: 「所有側」は紛らわしいです。たとえば、部門が従業員を所有するように設計でき、部門を削除すると、その従業員もすべて削除されます。これは、「Department エンティティがその Employee エンティティを所有している」と言うのは理にかなっていますが、リレーションシップは引き続き Employee エンティティによって所有されます@OneToMany(mappedBy="department")
。@OneToMany(mappedBy="department", cascade= CascadeType.REMOVE)