@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が従業員を所有しているか、従業員がそのParkingLotを所有しているように適用されるのではなく、ParkingLotと従業員の関係がEmployee(またはParkingLotは下記参照)の所有と同様です。 ManyToOneにはmappedByがありません。したがって、関係を所有するOneToManyアノテーションの下で常に指定されたエンティティです(たとえば、プロジェクトテーブルはすべての従業員に外部キーを持つことができないため) したがって、例のManyToOne/OneToManyマッピングでは、どちらの側が関係を所有しているかを選択する必要はありません。従業員と駐車場の間に選択肢があります。私はParkingLotを選択しました。 選択肢が与えられると、それは何が重要ですか?まあ、主な違いは、mappedByには偽のカスケードがあることです。どちらのテーブルに外部キーがあるかどうか、またはその関係が独自のテーブルにある場合はJPAはすべてのケース(@InverseJoinColumnなど)をサポートしています。
双方向マッピングの場合、マッピングの明確なターゲットとソースがないため、マッピングの方法によって異なります。この用語は単方向マッピングに適用され、ソース側はもちろんマッピングを持つエンティティです(ターゲットエンティティの可能な知識です)
4)該当しません(ただし、ParkingLotとEmployee単方向)。 5)関係の所有者が「ワンエンティティに」常に 6)逆側
最後の注意: は部門が従業員を所有している場合ように、例えば、我々が設計でき、混乱して「側を所有しています」私たちは部門を削除し、従業員全員も削除されます。これは、@OneToMany(mappedBy="department")
を@OneToMany(mappedBy="department", cascade= CascadeType.REMOVE)
に変更することによって行われます。「DepartmentエンティティがEmployeeエンティティを所有しています」と言うのは本当に意味がありますが、その関係は従業員エンティティが所有しています。
JPAがマッピング(リンク)操作を実行するが、プロバイダがSQL操作を実行するため、所有サイドが混乱します。質問:私は、Employeeとプロジェクトの間に多対多の関係があり、joinTableのようなすべての必要なマッピングがあります。テーブルクラス/エンティティを結合する。この場合、joinTableをどのように設定するのですか? – peterwkc
カスケードは、所有者関係またはJPAマッピングとSQL操作にどのような影響を及ぼしますか? – peterwkc
追加のデータ/列ではなく、関係のみを保持する限り、JoinTableのための別個のクラス/エンティティは必要ありません。カスケード質問:http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Cascading – esej