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));
我正在创建一个允许用户创建酒店房间预订的应用程序。
我有实体房间、用户、预订
这些是我在实体 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));