0

Java Persistence 2.0, Final Release ” 第 404 页有以下示例:

示例 3:从可嵌入类到另一个实体的一对一关联。

@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;
...
}

如何必须更改实体 ParkingSpot 以指向集合表 EMP_LOCATION 内的可嵌入 LocationDetails。

应该

@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 ”​​ 第 271 页。

关于可嵌入类型的一个附带条件是,如果嵌入对象是元素集合的一部分,则集合中的嵌入对象只能包括外键存储在源表中的映射。它可以包含拥有的关系,例如一对一和多对一,但不能包含外键位于目标表或连接表中的一对多或多对多关系. 同样,它不能包含其他基于集合表的映射,如元素集合。

解决方案是将 LocationDetails 作为实体,而不是嵌入对象。

于 2015-08-13T13:58:27.563 回答