JPA教程 – JPA查询IN示例 IN表达式可以检查单值路径表达式是否是集合的成员。 集合可以内联定义为一组字面值,或者可以从子查询派生。 以下代码显示了如何在JPQL中使用IN运算符。 List l = em.createQuery( "SELECT DISTINCT p FROM Professor e, IN(e.phones) p") .getResultList(); 以下代码显示如何使用NOT IN运算符 List l = em.createQuery( "SELECT e FROM Professor e WHERE e.address.state NOT IN ("NY", "CA")") .getResultList(); 例子 下面的代码来自PersonDaoImpl.java。 package cn.w3cschool.common; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.transaction.annotation.Transactional; @Transactional public class PersonDaoImpl { public void test() { prepareData(); List l = em.createQuery( "SELECT DISTINCT p FROM Professor e, IN(e.phones) p") .getResultList(); for (Object p : l) { printResult(p); } } private void prepareData() { Professor p = new Professor(); p.setId(0); p.setName("TOM"); p.setSalary(1111L); Department d = new Department(); d.setId(1); d.setName("Design"); p.setDepartment(d); d.getProfessors().add(p); Phone phone = new Phone(); phone.setId(1); phone.setNumber("111-111-1111"); phone.setProfessor(p); em.persist(p); em.persist(phone); em.persist(d); } private static void printResult(Object result) {...
JPA教程 – JPA查询like Escape示例 如果模式字符串包含应匹配的下划线或百分号,则ESCAPE子句可以使用\指定转义字符: SELECT d FROM Department d WHERE d.name LIKE 'QA\_%' ESCAPE '\' 例子 下面的代码来自PersonDaoImpl.java。 package cn.w3cschool.common; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.transaction.annotation.Transactional; @Transactional public class PersonDaoImpl { public void test() { prepareData(); List l = em.createQuery( "SELECT d FROM Department d WHERE d.name LIKE "Q\\_%" ESCAPE "\\"") .getResultList(); for (Object p : l) { printResult(p); } } private void prepareData() { Address address = new Address(); address.setState("BC"); Professor p = new Professor(); p.setId(0); p.setName("TOM"); p.setSalary(1111L); p.setAddress(address); Department d = new Department(); d.setId(1); d.setName("Design"); p.setDepartment(d); d.getProfessors().add(p); Phone phone = new Phone(); phone.setId(1); phone.setNumber("111-111-1111"); phone.setProfessor(p); em.persist(p); em.persist(phone); em.persist(address); em.persist(d); } private static void printResult(Object result) { if (result == null) { System.out.print("NULL"); } else if (result...
JPA教程 – JPA查询集合大小示例 我们可以使用SIZE函数来获取实体计数。 以下代码选择具有两个员工的部门。 "SELECT d FROM Department d WHERE SIZE(d.employees) = 2") 例子 下面的代码来自PersonDaoImpl.java。 package cn.w3cschool.common; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.transaction.annotation.Transactional; @Transactional public class PersonDaoImpl { public void test() { prepareData(); List l = em.createQuery( "SELECT d FROM Department d WHERE SIZE(d.employees) = 2") .getResultList(); for (Object p : l) { printResult(p); } } private void prepareData() { Professor p = new Professor(); p.setId(0); p.setName("TOM"); p.setSalary(1111L); Department d = new Department(); d.setId(1); d.setName("Design"); p.setDepartment(d); d.getProfessors().add(p); Phone phone = new Phone(); phone.setId(1); phone.setNumber("111-111-1111"); phone.setProfessor(p); em.persist(p); em.persist(phone); em.persist(d); } private static void printResult(Object result) { if (result == null) { System.out.print("NULL"); } else if (result instanceof Object[]) { Object[] row = (Object[]) result; System.out.print("["); for (int i...