JPA& RequestFactory:外键的持久性

时间:2011-07-05 17:21:48

标签: gwt jpa jpa-2.0 requestfactory

在我的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   持久性服务 -   2.3.0.v20110604-r9504):org.eclipse.persistence.exceptions.DatabaseException   内部异常:   org.firebirdsql.jdbc.FBSQLException:   GDS例外。 335544665.违反   PRIMARY或UNIQUE KEY约束   表“USERS2”上的“INTEG_388”

这是因为身份ID为“12”的用户已经存在且JPA想要创建一个具有相同ID的新用户,而不是仅创建一个用户ID为“12”作为其外键的新预订。

如何告诉RequestFactory不要创建新用户,而只是将现有用户的用户ID分配给新的预订条目?

1 个答案:

答案 0 :(得分:4)

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

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