2015-08-21 3 views
0

У меня есть успешно создать объект (и соответствующая таблица данных), как следующий:JPA, хранить Entity с внешними ключами ManyToOne

@XmlRootElement 
@Entity 
@Table(name = "USERS_BOOK") 
public class UsersBook { 

@Id 
@Column(name = "ID") 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator =  "USERS_BOOK_SQ") 
private long    id; 

@ManyToOne(fetch = FetchType.EAGER, optional = true) 
private Room   room; 

@ManyToOne(fetch = FetchType.EAGER, optional = true) 
private Building  building; 

Это создает таблицу с 2 внешними ключами (room_id и building_id) к соответствующим сущностям (комната и здание).

Теперь я хочу сохранить новый UserBook, связанный с комнатой и зданием, уже сохраненным на моем db.

Я уже знаю первичные ключи (ID) строки в таблице Room и Building table.

Как я могу сказать, что JPA использует внешний ключ, который у меня уже есть для комнаты и здания?

Надеюсь, я был достаточно ясен.

Спасибо, ребята!

ответ

1

Использование EntityManager.find() (на самом деле найти их в базе данных) или EntityManager.getReference() (чтобы получить инициализированы прокси, при условии, что они существуют в базе данных):

Room room = em.getReference(Room.class, roomId); 
Building building = em.getReference(Building.class, buildingId); 
UsersBook book = new UsersBook(); 
book.setRoom(room); 
book.setBuilding(building); 
em.persist(book); 
Смежные вопросы