EntityManager пытается создать существующую сущность - PullRequest
0 голосов
/ 08 декабря 2018

Я создаю приложение, которое позволяет пользователям создавать резервирование номеров в отелях.

У меня есть номер сущности, пользователь, резервирование

Это мои отношения, установленные в классе сущностей 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 не пытаться создать этот UserRoom также и в более поздний момент), поскольку он уже существует?

1 Ответ

0 голосов
/ 08 декабря 2018

Вы получаете эту ошибку, потому что JPA каскадно перенаправляет операцию до user, которая рассматривается как новая сущность.

Чтобы предотвратить это:

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

, где getId необходимо заменить соответствующим образом.

Приведенный выше код предполагает, что вы не заинтересованы в изменении user.В противном случае необходима операция слияния:

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