如何在 JPA 中保存外键实体

2022-09-04 07:36:09

我有2个表的客户和客户历史。customhistory 具有外键 customerId,它引用客户的 customerId。在JPA生成的实体中,我在客户历史类中有一个客户对象,而我只想在消费者历史表中保存客户Id

我得到了正确的客户Id,但是当我想保存属性customerId时,我只有客户的对象,但没有客户Id在消费者历史的自动生成的实体类中

@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;

如上所示,我没有客户Id与我一起在实体客户历史记录中。如何保存?


答案 1

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

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

CustomerHistory newCustomerHistory = new CustomerHistory();
newCustomerHistory.setCustomer(customer);
entityManager.persist(newCustomerHistory);

答案 2

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


推荐