代码之家  ›  专栏  ›  技术社区  ›  Jay

如何在参数为集合的情况下编写JPA查询?

  •  5
  • Jay  · 技术社区  · 14 年前

    假设下一节课,你怎么找到一个 Person 使用特定的电子邮件地址?

    public class Person implements Comparable<Person> {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name="id")
        private long id = 0;
    
        @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, fetch=FetchType.LAZY)
        private Set<String> email = new HashSet<String>();
    }
    

    只是这么简单,还是有合适的方法?

    select p from Person p where p.email=:email
    
    2 回复  |  直到 14 年前
        1
  •  10
  •   musiKk    14 年前

    没那么容易。JPQL提供 IN

    select p from Person p, IN(p.email) m where m = :email
    

    “旧”方法(类似SQL)是:

    select p from Person p join p.email m where m = :email
    
        2
  •  1
  •   duffymo    14 年前

    WHERE email IN ('foo@yahoo.com', 'bar@gmail.com')
    

    不幸的是,我不知道一个简单的方法来做到这一点。如果使用原始SQL执行此操作,则必须分两步执行:创建绑定参数 ?