我有2个表客户和客户历史。 customhistory有外键customerId,它引用了客户的customerId。在由JPA生成的实体中,我在customerhistory类中有一个customer对象,而我想在consumerhistory表中只保存customerId
我正在获得正确的customerId,但是当我想要保存属性customerId时,我只有客户的对象,但在自动生成的实体类消费历史中没有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。如何保存?
答案 0 :(得分:21)
使用entityManager的getReference调用使用id加载客户对象,然后将其设置到客户历史记录中。在大多数情况下,此调用将返回仅嵌入了id的代理,除非调用客户的其他方法,否则不会加载客户属性。
Customer customer = entityManager.getReference(Customer.class, cutomerId);
CustomerHistory newCustomerHistory = new CustomerHistory();
newCustomerHistory.setCustomer(customer);
entityManager.persist(newCustomerHistory);
答案 1 :(得分:2)
您的表之间的关联由JPA管理,您不应该访问customerHistory中的customerId。您应该使用customer.getHistory()(或您调用的任何内容)来操作关联的历史记录条目。引用完整性将由JPA管理。
答案 2 :(得分:0)
如果您使用eclipseLink作为JPA提供程序,则会有一个注释用于刷新关联的属性,在类之前设置如下:
@Cache(alwaysRefresh = true, disableHits = true)
public class TheMainEntity {
...
...
...
...
}