【问题标题】:EntityManager tries to create existing entityEntityManager 尝试创建现有实体
【发布时间】:2019-05-10 04:23:53
【问题描述】:

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

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

这些是我在实体类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«,因为该用户已经存在。我如何告诉 EntityManager 不要尝试创建 User(以及稍后的 Room),因为它已经存在?

【问题讨论】:

  • 您如何将现有用户设置为您正在保留的 Reservation 对象?

标签: java jpa persistence psql entitymanager


【解决方案1】:

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

为了防止这种情况:

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

getId 必须相应替换。

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

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

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多