12

我有 2 张表客户和客户历史。customhistory 有外键 customerId,它引用了客户的 customerId。在由 JPA 生成的实体中,我在 customerhistory 类中有一个客户对象,而我只想将 customerId 保存在 consumerhistory 表中

我得到了正确的customerId,但是当我想保存属性customerId时,我只有customer的对象,但在consumerhistory的自动生成实体类中没有customerId

@Entity
public class Customerhistory implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int primarykeyId;

    //bi-directional many-to-one association to Customer
    @ManyToOne
    @JoinColumn(name="CustomerId")
    private Customer customer;

如上所示,我在实体 customerHistory 中没有 customerId。如何保存?

4

3 回答 3

24

使用 entityManager 的getReference调用使用 id 加载客户对象,然后将其设置到客户历史记录中。在大多数情况下,此调用将返回仅嵌入 id 的代理,除非调用客户的其他方法,否则不会加载客户属性。

Customer customer = entityManager.getReference(Customer.class, cutomerId);

CustomerHistory newCustomerHistory = new CustomerHistory();
newCustomerHistory.setCustomer(customer);
entityManager.persist(newCustomerHistory);
于 2013-05-15T18:50:11.840 回答
2

您的表之间的关联由 JPA 管理,您不应该访问 customerHistory 中的 customerId。您应该使用 customer.getHistory() (或您所称的任何名称)来操作相关的历史条目。参照完整性将由 JPA 管理。

于 2013-05-15T18:22:03.027 回答
0

如果您将 eclipseLink 用作 JPA 提供程序,则有一个用于刷新关联属性的注释,请在类之前设置它,如下所示:

@Cache(alwaysRefresh = true, disableHits = true)
public class TheMainEntity { 
    ...
    ...
    ...
    ...
}        
于 2014-09-09T07:36:46.837 回答