Mysql JPA/Hibernate查询只返回一行

Mysql JPA/Hibernate查询只返回一行,mysql,sql,hibernate,jpa,Mysql,Sql,Hibernate,Jpa,我正在使用JPA2/Hibernate5和MySql上的Java8 我运行以下本机查询: Query q = entityManager.createNativeQuery(sb.toString(), JobWithDistance.class); q.setParameter("ids", ids); List<JobWithDistance> jobsWD = (List<JobWithDistance>) q.getResultList(); 及 对数据库运行以

我正在使用JPA2/Hibernate5和MySql上的Java8

我运行以下本机查询:

Query q = entityManager.createNativeQuery(sb.toString(), JobWithDistance.class);
q.setParameter("ids", ids);
List<JobWithDistance> jobsWD = (List<JobWithDistance>) q.getResultList();

对数据库运行以下SQl时,返回3行:

 select *  , -1 as noReviews, -1 as averageRating  , -1 AS distance  from     www.job as e  inner join www.person_job as pj on e.id = pj.JOB_ID  inner join www.person as p on pj.PER_ID = p.id  left join www.rating_job rp ON e.id = rp.JOB_ID  left join www.rating r ON rp.RAT_ID = r.id   where e.id in (65, 66, 64) 
谢谢

解决方案:

@Override
public List<Job> findById(String ids) {

    String[] args = ids.split(",");
    Set<String> idSet = new HashSet<String>(Arrays.asList(args));

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Job> query = builder.createQuery(Job.class);
    Root<Job> post = query.from(Job.class);
    query.select(post).where(post.get("id").in(idSet)); // or pass a tag collection to `in` method
    TypedQuery<Job> typedQuery = entityManager.createQuery(query);
    List<Job> results = typedQuery.getResultList();
    return results;
}
@覆盖
公共列表findById(字符串ID){
字符串[]args=ids.split(“,”);
Set idSet=newhashset(Arrays.asList(args));
CriteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery=builder.createQuery(Job.class);
Root post=query.from(Job.class);
query.select(post.where(post.get(“id”).in(idSet));//或将标记集合传递给`in`方法
TypedQuery TypedQuery=entityManager.createQuery(查询);
List results=typedQuery.getResultList();
返回结果;
}

SOULUTION:
不是有效的答案格式。请详细说明
 select *  , -1 as noReviews, -1 as averageRating  , -1 AS distance  from     www.job as e  inner join www.person_job as pj on e.id = pj.JOB_ID  inner join www.person as p on pj.PER_ID = p.id  left join www.rating_job rp ON e.id = rp.JOB_ID  left join www.rating r ON rp.RAT_ID = r.id   where e.id in (65, 66, 64) 
@Override
public List<Job> findById(String ids) {

    String[] args = ids.split(",");
    Set<String> idSet = new HashSet<String>(Arrays.asList(args));

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Job> query = builder.createQuery(Job.class);
    Root<Job> post = query.from(Job.class);
    query.select(post).where(post.get("id").in(idSet)); // or pass a tag collection to `in` method
    TypedQuery<Job> typedQuery = entityManager.createQuery(query);
    List<Job> results = typedQuery.getResultList();
    return results;
}