1

私の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を新しい予約エントリに割り当てるように指示するにはどうすればよいですか?

4

1 に答える 1

4

問題の分析は正しいと思います。

ユーザーを作成する代わりに、EntityManager find()またはgetReference()を使用して既存のユーザーアイテムを取得します。

于 2011-07-05T17:31:59.713 に答える