在我的 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”的用户分配给新创建的预订。但我无法将新预订分配给已经存在的用户 ID 12。我收到以下错误:
[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 或 UNIQUE KEY 约束“INTEG_388”
这是因为 ID 为“12”的用户已经存在,而 JPA 想要创建一个具有相同 ID 的新用户,而不是仅仅创建一个以用户 ID“12”作为外键的新预订。
如何告诉RequestFactory
不要创建新用户,而只是将现有用户的用户 ID 分配给新的预订条目?