JPA加入问题,而不是从'many'实体类获取值

时间:2015-10-07 18:41:59

标签: java hibernate jpa

我试图通过使用@ManytoOne注释(我理解正确的方法)或者在查询构建器中加入(抛出错误)来连接两个实体类。

这是第一个实体类('Many'):

public class PlanTactic implements Persistable<Integer>
{
private static final long serialVersionUID = 5283865222214446581L;

@Id
@Column(name="TacticId")
private Integer id;

@Column(name="StartDate")
private Date startDate;

@Column(name="EndDate")
private Date endDate;

这是第二个实体类('one'):

@ManyToOne(optional=false,fetch=FetchType.EAGER)
@JoinColumns({@JoinColumn(name="TacticId",referencedColumnName="TacticId",insertable=false,updatable=false)} )
private PlanTactic planTactic;

这是存储库类中的查询:

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<PlanTacticDetail> q =   builder.createQuery(PlanTacticDetail.class);
Root<PlanTacticDetail> c = q.from(PlanTacticDetail.class);
//Root<PlanTactic> p = q.from(PlanTactic.class);
//q.multiselect(c,p.get("usingTargetList"));
q.where(c.get("month").in(months));
return em.createQuery(q).getResultList();

如果我取消注释上面的行,我将收到一个错误,这只会在JSON中显示我只有第二个类('one')没有'many'类的成员出现。

感谢。

1 个答案:

答案 0 :(得分:0)

在JPA中,默认情况下会急切地加载ManyToOne关联。但是,我假设您使用的提供程序是Hibernate。不知何故,Hibernate将始终使用延迟提取加载任何对象。

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<PlanTacticDetail> q = builder.createQuery(PlanTacticDetail.class);
Root<PlanTacticDetail> ptd = q.from(PlanTacticDetail.class);
ptd.fetch("planTactic");