如何基于传递参数进行搜索操作来连接2个表?

时间:2014-02-10 07:16:28

标签: java jpa join criteria-api

我有2个实体Addemp和Job.I想基于empid加入这两个表.empid是作业表中的外键和addemp表中的主键

这里我正在根据员工ID进行搜索操作。我正在使用搜索操作的条件构建器

这里的关系很多人

 public List<Object[]> findEmployeeList(Integer id)
{
    EntityManager em=null;
    try
    {

        em=getEntityManager();
          CriteriaBuilder cb=em.getCriteriaBuilder();
        CriteriaQuery cq=cb.createQuery(Addemp.class);
        Root<Addemp>rt= cq.from(Addemp.class);
        Join<Addemp,Job> job=rt.join(Addemp_.jobCollection);
        Predicate predicate=cb.equal(rt.get("empId"),id);
        cq.where(predicate);



       /* cq.select(rt.get("firstName"));
        cq.where (cb.equal(rt.<String>get("empId"),id));*/
         Query qry= em.createQuery(cq);
    return qry.getResultList();

1 个答案:

答案 0 :(得分:0)

根据上述评论中的问题和JPQL查询,这里是标准查询提案:

public List<Tuple> findEmployeeList(Integer id)
{
    em = getEntityManager();
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Tuple> cq = cb.createTupleQuery();
    Root<Addemp> empRoot = cq.from(Addemp.class);
    Root<Job> jobRoot = cq.from(Job.class);
    cq.multiselect(empRoot.get("empId").alias("id"), 
                   empRoot.get("firstName").alias("first"),
                   empRoot.get("lastName").alias("last"),
                   jobRoot.get("jobTitle").alias("title"),
                   jobRoot.get("empStatus").alias("status"),
                   jobRoot.get("subUnit").alias("subunit"));
    cq.where(cb.equal(empRoot.get("empId"), id));

    TypedQuery<Tuple> q = em.createQuery(cq);
    return q.getResultList();
}

接下来,您可能想要提取元组结果:

List<Tuple> tuples = service.findEmployeeList(2);
for (Tuple t : tuples) {
    StringBuilder builder = new StringBuilder(64)
        .append(t.get("id")).append(", ")
        .append(t.get("first")).append(", ")
        .append(t.get("last")).append(", ")
        .append(t.get("title")).append(", ")
        .append(t.get("status")).append(", ")
        .append(t.get("subunit"));
    System.out.println(builder.toString());
}

我希望它有所帮助。