我正在创建一个允许用户创建酒店房间预订的应用程序。
我有实体房间,用户,预订
这些是我在实体类Reservation
中设置的关系:
@Id
@GeneratedValue
private int id;
private Date reservationDate;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Room room;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private User user;
当我尝试使用Reservation
保存包含现有User
的新EntityManager.persist()
对象时,我收到一个PSQLException,说“ id = ...”的用户违反了Unique-Constraint» user_pkey«,因为该用户已经存在。我如何告诉EntitiyManager不要尝试创建已经存在的User
(以及以后的Room
)?
答案 0 :(得分:2)
您会收到此错误,因为JPA将持久性操作级联到user
,这被视为一个新实体。
为防止这种情况:
reservation.setUser(entityManager.getReference(User.class, user.getId()));
其中getId
必须被替换。
以上代码假定您对修改user
不感兴趣。否则,需要合并操作:
reservation.setUser(entityManager.merge(user));