Я искал более недели для исправления моей проблемы, но без каких-либо ясных результатов, хотя это кажется основной проблемой. Пожалуйста, дайте мне знать, если я делаю что-то неправильно или у меня есть недоразумение.JPA: Устойчивые объекты ManyToOne правильно
Вот ситуация:
Пользователь подключается к платформе для выполнения операций. Таким образом, у меня есть много отношений между объектами User и Transaction. (Пользователь делает много транзакций, и каждая транзакция совершается только одним пользователем)
Идея состоит в том, что когда я сохраняю новую «транзакцию», пользовательский идентификатор текущего пользователя платформы переходит в качестве внешнего ключа для таблицу транзакций.
Проблема заключается в том:
при попытке упорствовать новый «Сделка», новый «Пользователь» также создан новый UserId.
Я не нахожу, как получить правильно идентификатор текущего пользователя, чтобы добавить его в таблице транзакций
Вот мой код:
Объект сделки:
@Entity
public class Transaction implements Serializable{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
int idTransaction;
@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="FK_User")
User user;
}
субъект Пользователь:
@Entity
public class User implements Serializable{
int idUser;
@OneToMany(mappedBy="user")
Set<Transaction> transactions;
}
Мой метод doTransaction из ManagedBean:
public String doTransaction(){
String navigateTo="/pages/expediteur/succes";
transaction.setExpediteur(expediteur);
transactionServiceLocal.updateTransaction(transaction);
return navigateTo;
}
Надежда Я был ясен и краток в своем объяснении.
* EDIT *
Спасибо за помощь, я пытался реализовать решения в упоминалось комментарии, но теперь я получаю эту ошибку:
ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-46) Cannot add or update a child row: a foreign key constraint fails
и когда я добавляю эти строки в мой код:
System.out.println("The current user is "+user.getIdUser());
System.out.println("Your current transaction is "+user.getIdTransaction());
Я получаю 0 для всех объектов в качестве возврата.
Я думаю, что моя проблема правильна для моих объектов, хранящихся в базе данных.
Спасибо за помощь, я пытался реализовать решения в упоминались комментарии, но теперь я получаю эту ошибку: ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (по умолчанию задача-46) Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа завершилось ошибкой , и когда я добавлю эти строки в свой код: System.out.println («Текущий пользователь» + user.getIdUser()); System.out.println («Ваша текущая транзакция:« + user.getIdTransaction()); Я получаю 0 для всех объектов в качестве возврата. Я думаю, что моя проблема правильна для моих объектов, хранящихся в базе данных. – Lyes