当我知道主键但我没有主键的实体时建立JPA关系?

时间:2012-08-01 12:34:51

标签: hibernate jpa

考虑像这样的实体

public class SomeEntity {
    @ManyToOne
    @JoinColumn(name = "company_fk")
    private CompanyEntity company;
}

company_fk列是一个整数。在我的应用程序中,我经常发现自己的情况是我有company_fk整数,但我不一定有CompanyEntity。

我想要做的是创建SomeEntity的新实例并将其与CompanyEntity关联,因此我最终必须从数据库中读取CompanyEntity才能建立关系。这不是很好,因为即使我不需要这样做,我也会去db。

有没有办法避免为了建立关系而加载实体?我正在使用带有Hibernate的JPA 2,并且我愿意只使用hibernate映射来使这个工作有效。

1 个答案:

答案 0 :(得分:2)

这正是em.getReference()存在的原因。它假定具有给定ID的实体存在,并将代理返回给该实体:

// get a reference to the company without going to the DB:
CompanyEntity company = em.getReference(CompanyEntity.class, companyId);
SomeEntity e = new SomeEntity();
e.setCompany(company);

Hibernate的原生Session类具有相同的方法,除了它被称为load()