0

404 ページの「Java Persistence 2.0、最終リリース」には、次の例があります。

例 3: 埋め込み可能なクラスから別のエンティティへの 1 対 1 の関連付け。

@Entity
public class Employee {
  @Id int id;
  @Embedded LocationDetails location;
...
}

@Embeddable
public class LocationDetails {
  int officeNumber;
  @OneToOne ParkingSpot parkingSpot;
...
}

@Entity
 public class ParkingSpot {
  @Id int id;
  String garage;
  @OneToOne(mappedBy="location.parkingSpot") Employee assignedTo;
...
}

Employee 内に複数の LocationDetails が必要です。

@Entity
public class Employee {
  @Id int id;
  @ElementCollection
  @CollectionTable(name="EMP_LOCATION") 
  Map<String, LocationDetails> locations;
...
}

コレクション テーブル EMP_LOCATION 内の埋め込み可能な LocationDetails を指すようにエンティティ ParkingSpot を変更する方法。

する必要があります

@OneToOne(mappedBy="location.parkingSpot") Employee assignedTo;

@ElementCollection に置き換えられますか?

ありがとう!

4

1 に答える 1

1

私は本で答えを見つけました: " Keith M., Schincariol M. - Pro JPA 2, 2nd Edition (The Expert's Voice in Java) - 2013 " page 271.

埋め込み型に関する但し書きとして、埋め込みオブジェクトが要素コレクションの一部である場合、コレクション内の埋め込みオブジェクトには、外部キーがソース テーブルに格納されているマッピングのみを含めることができます。1 対 1 や多対 1 などの所有関係を含めることはできますが、外部キーがターゲット テーブルまたは結合テーブルにある 1 対多または多対多の関係を含めることはできません。 . 同様に、要素コレクションなど、他のコレクション テーブル ベースのマッピングを含めることはできません。

解決策は、埋め込みオブジェクトではなく、エンティティとして LocationDetails を持つことです。

于 2015-08-13T13:58:27.563 に答える