如何用ElementCollection替换双向OneToOne关系



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

我想有多个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取代?

谢谢!

我在书中找到了答案:"Keith M., Schincariol M. - Pro JPA 2, 2nd Edition (the Expert's Voice in Java) - 2013" 271页。

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

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

相关内容

  • 没有找到相关文章

最新更新