Java 使用数组进行JPA查找

Java 使用数组进行JPA查找,java,hibernate,jakarta-ee,jpa,Java,Hibernate,Jakarta Ee,Jpa,我的关系是单向的。这里我有员工和Andress实体。在员工实体中,我有以下代码: @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name = "HOME_ADDRESS") private Address homeAddress; 我有一个地址对象数组,希望编写一个查找,返回映射到这些地址的客户对象数组 select e from Employee e where e.homeAddress.id IN '?' 我不知道怎么处理“?”部分。是在

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

@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "HOME_ADDRESS")
private Address homeAddress;
我有一个地址对象数组,希望编写一个查找,返回映射到这些地址的客户对象数组

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

我不知道怎么处理“?”部分。是在地址数组上循环、将id添加到字符串并将其作为参数传递给上面的查询的唯一选项,还是有方法将数组传递给查询并期望得到相同的结果?

否,您不能将其作为字符串传递,而是作为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();
String jpql=“从员工e中选择e,其中e.homeAddress.id位于:地址”;
Set addressIds=Arrays.stream(地址)
.map(地址::getId)
.collect(收集器.toSet());
返回em.createQuery(jpql,Employee.class)
.setParameter(“地址”,地址ID)
.getResultList();

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

2解决方案:

  • HQL

    String hql=“从员工e中选择e,其中e.homeAddress.id位于(:addresses)”
    Query Query=getSession().createQuery(hql)
    setParameterList(“地址”,即您的\u列表\u地址\u集合)

  • 标准

    条件=session.createCriteria(Employee.class); 标准。添加(限制。在(“地址”,您的地址列表\地址集合))


  • 是的,您可以将
    列表id
    传递给上述查询,只需
    添加参数(MyID,ids)
    ,查询将
    从员工e中选择e,其中e.homeAddress.id位于:ids