我试图通过使用@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'类的成员出现。
感谢。
答案 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");