2015-08-11 3 views
0

"Java Persistence 2.0, Final Release" на стр 404 имеет следующий пример:Как заменить двунаправленное отношение OneToOne ElementCollection?

Пример 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 внутри Employee:

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

Как объект ParkingSpot должен быть перенаправлен обратно вкладываемые LocationDetails внутри коллекция таблицы EMP_LOCATION.

Должно быть

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

заменил бы на @ElementCollection?

Спасибо!

ответ

1

Я нашел ответ в книге: «Keith M., Schincariol M. - Pro JPA 2, 2nd Edition (The Expert's Voice in Java) - 2013» страница 271.

оговориться о вкладываемых типов является то, что если внедренный объект является частью коллекции элементов, то встроенный объект коллекция может включать только сопоставления, в которых хранится внешний ключ в исходной таблице. Он может содержать собственные отношения, такие как один-к-одному и много-к-одному, но он не может содержать отношения «один ко многим» или « », когда внешний ключ находится в целевой таблице или таблицу соединений. Аналогично, он не может содержать другие сопоставления на основе таблицы , такие как коллекции элементов.

Решение было бы иметь LocationDetails как объект, а не встроенный объект.

Смежные вопросы