EntityManager 尝试创建现有实体

EntityManager tries to create existing entity

我正在创建一个允许用户创建酒店房间预订的应用程序。

我有实体房间、用户、预订

这些是我在实体 class 中设置的关系 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 说 "id=..." 的用户违反了唯一约束 » user_pkey«,因为该用户已经存在。我如何告诉 EntitiyManager 不要尝试创建 User(稍后也会创建 Room),因为它已经存在?

您收到该错误是因为 JPA 将持久化操作级联到被视为新实体的 user

要防止这种情况:

reservation.setUser(entityManager.getReference(User.class, user.getId()));

其中 getId 必须相应地替换。

以上代码假定您对修改 user 不感兴趣。否则,需要合并操作:

reservation.setUser(entityManager.merge(user));