私のJPAエンティティクラスには次のものがあります。
@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
、ユーザー制約のない永続性は正常に機能します。しかし、上記のコードでは、ID「12」のユーザーを新しく作成された予約に割り当てる必要があります。しかし、既存のユーザーID12に新しい予約を割り当てることはできません。次のエラーが発生します。
[EL警告]:2011-07-05 18:48:45.464--UnitOfWork(267787945)--例外[EclipseLink-4002](Eclipse Persistence Services-2.3.0.v20110604-r9504):org.eclipse.persistence.exceptions .DatabaseException内部例外:org.firebirdsql.jdbc.FBSQLException:GDS例外。335544665.テーブル"USERS2"のPRIMARYまたはUNIQUEKEY制約"INTEG_388"の違反
これは、ID「12」のユーザーがすでに存在し、JPAが、ユーザーID「12」を外部キーとして新しい予約を作成するのではなく、同じIDで新しいユーザーを作成したいためです。
RequestFactory
新しいユーザーを作成するのではなく、既存のユーザーのユーザーIDを新しい予約エントリに割り当てるように指示するにはどうすればよいですか?