JPA使用数组查找

时间:2015-01-29 07:04:27

标签: java hibernate java-ee jpa

我有单向关系。这里我有Employee和Andress实体。在Employee实体中,我有以下代码:

@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "HOME_ADDRESS")
private Address homeAddress;

我有一个Adress对象数组,想要编写一个返回映射到这些地址的Customer对象数组的查找。

select e from Employee e where e.homeAddress.id IN '?'

我不知道怎么处理&#39;?&#39;部分。是遍历地址数组的唯一选项,将id添加到字符串并将其作为参数传递给上面的查询,还是有办法将数组传递给查询并期望得到相同的结果?< / p>

2 个答案:

答案 0 :(得分:1)

不,您不会将其作为String传递,而是作为ID的集合传递。而且您的查询无效。它应该是:

String jpql = "select e from Employee e where e.homeAddress.id IN :addresses";
Set<Long> addressIds = Arrays.stream(addresses)
                             .map(Address::getId)
                             .collect(Collectors.toSet());
return em.createQuery(jpql, Employee.class)
         .setParameter("addresses", addressIds)
         .getResultList();

这使用Java 8将地址数组转换为一组ID,但您当然可以使用goold old for循环。

答案 1 :(得分:1)

2解决方案:

  1. HQL

    字符串hql =“从员工e中选择e,其中e.homeAddress.id IN(:addresses)”;
    查询query = getSession()。createQuery(hql);
    query.setParameterList(“addresses”,your_list_address_collection);

  2. 标准

    标准条件= session.createCriteria(Employee.class); criteria.add(Restrictions.in(“addresses”,your_list_address_collection));