" Java Persistence 2.0,最终版本"第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取代?
谢谢!
答案 0 :(得分:1)
我在书中找到了答案:“Keith M., Schincariol M. - Pro JPA 2, 2nd Edition (The Expert's Voice in Java) - 2013”第271页。
关于可嵌入类型的附带条件是,如果嵌入对象是一个 元素集合的一部分,然后是嵌入的对象 集合只能包含存储外键的映射 在源表中。它可以包含所拥有的关系,例如 一对一和多对一,但它不能包含一对多或多对一 外键在其中的多对多关系 目标表或连接表。同样,它不能包含其他 基于集合表的映射,如元素集合。
解决方案是将LocationDetails作为实体,而不是嵌入对象。