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");
        }
    });

///////////////////

UsersBookings没有用户约束的持久性工作正常。但是使用上面的代码,我希望/必须将 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 分配给新的预订条目?

4

1 回答 1

4

我认为你对问题的分析是正确的。

而不是创建用户,而是使用 EntityManager find() 或 getReference() 来检索现有的用户项。

于 2011-07-05T17:31:59.713 回答