В моем классе JPA Entity у меня есть:
@Entity
public class Booking {
@Id
@SequenceGenerator(name = "BOOKING", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "BOOKING")
private Integer id;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(nullable = false)
private User user;
// ...
}
В моем представлении GWT у меня есть:
MainRequestFactory.BookingRequest bookingRequest = reqFactory.bookingRequest();
BookingProxy bookingProxy = bookingRequest.create(BookingProxy.class);
UserProxy userProxy = bookingRequest.create(UserProxy.class);
userProxy.setId(12);
bookingProxy.setUser(userProxy);
Request<Void> persistRequest = bookingRequest.persist().using(bookingProxy);
persistRequest.fire(new Receiver<Void>() {
@Override
public void onSuccess(Void response) {
GWT.log("persisted");
}
});
/////////////////////
Users
и Bookings
постоянство без пользовательского ограничения работает нормально. Но с помощью приведенного выше кода я хочу/должен назначить пользователя с идентификатором «12» для вновь созданного бронирования. Но я не могу назначить новое бронирование уже существующему идентификатору пользователя 12. Я получаю следующую ошибку:
[Предупреждение EL]: 2011-07-05 18:48:45.464--UnitOfWork(267787945)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions .DatabaseException Внутреннее исключение: org.firebirdsql.jdbc.FBSQLException: исключение GDS. 335544665. нарушение ограничения PRIMARY или UNIQUE KEY "INTEG_388" в таблице "USERS2"
Это связано с тем, что пользователь с идентификатором «12» уже существует, и JPA хочет создать нового пользователя с таким же идентификатором, а не просто создавать новое бронирование с идентификатором пользователя «12» в качестве внешнего ключа.
Как я могу указать RequestFactory
НЕ создавать нового пользователя, а вместо этого просто присвоить идентификатор уже существующего пользователя новой записи бронирования?