JPA,存储具有ManyToOne外键的实体

时间:2015-08-21 09:59:36

标签: jpa many-to-one

我已经成功创建了一个实体(以及相应的数据表),如下所示:

@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)的表到相应的实体(房间和建筑物)。

现在,我想存储一个与已存储在我的数据库中的房间和建筑物相关联的新用户书。

我已经知道Room表和Building表中一行的主键(ID)。

我如何告诉JPA使用我已经拥有的房间和建筑外键?

我希望我足够清楚。

谢谢你们!

1 个答案:

答案 0 :(得分: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);