我正在创建一个应用程序,允许用户创建酒店房间预订。
我有实体房间、用户、预订
这些是我在实体类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;
当我尝试使用 EntityManager.persist()
保存包含现有 User
的新 Reservation
对象时,我收到一个 PSQLException,提示 user使用“id=...”违反了唯一约束»user_pkey«,因为该用户已经存在。我如何告诉 EntitiyManager 不要尝试创建该 User
(以及稍后的 Room
),因为它已经存在?
最佳答案
您会收到该错误,因为 JPA 将持久操作级联到被视为新实体的 user
。
为了防止这种情况发生:
reservation.setUser(entityManager.getReference(User.class, user.getId()));
其中 getId
必须相应替换。
上面的代码假设您对修改用户
不感兴趣。否则,需要进行合并操作:
reservation.setUser(entityManager.merge(user));
关于java - EntityManager 尝试创建现有实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53685848/