你能参数化jpql中的where子句吗
can you parameterized where clause in jpql
我对 JPQL 不是很熟悉,但我知道您可以通过执行以下操作来参数化条件:
em.createQuery("SELECT p FROM Person p WHERE p.firstName = :name)
.setParameter("name","Bill");
或者:
em.createQuery("SELECT p FROM Person p WHERE p.firstName= ?1)
.setParameter(1,"Bill");
但是你能参数化其他东西吗?通过参数化 WHERE 子句来说明条件。例如,你可以这样做:
em.createQuery("SELECT p FROM Person p WHERE :criteria = Bill)
.setParameter("criteria","p.lastName");
我测试了上面的代码,但它不起作用,所以我的问题是:有没有办法在 JPQL 中参数化 WHERE 子句。或者是否有任何其他查询语言支持 WHERE 子句参数化?非常感谢!
试试这个
TypedQuery<Person> query = em.createQuery("SELECT p FROM Person p WHERE p.lastName = :lastName", Person.class);
query.setParameter("lastname", "Bill");
如果您想添加更多参数,那么
TypedQuery<Person> query = em.createQuery("SELECT p FROM Person p WHERE p.lastName = :lastName AND p.firstName = :firstName", Person.class);
query.setParameter("lastName", "Bill");
query.setParameter("firstName", "Jack");
创建查询后,您可以使用
query.getResultList();
如果您期待多个结果
或
query.getSingleResult();
如果您只希望得到一个结果(例如按主键或唯一列查询)
For more information, refer to TypedQuery
回答评论中的问题:
一个。要么有三个查询并根据他们在 UI
中选择的内容使用查询
String query;
if (isFirstName) {
query = "SELECT p FROM Person p WHERE p.firstName = :searchCriteria"
} else if (isMiddleName) {
query = "SELECT p FROM Person p WHERE p.middleName = :searchCriteria"
} else {
query = "SELECT p FROM Person p WHERE p.lastName = :searchCriteria"
}
TypedQuery < Person > query = em.createQuery(query, Person.class);
query.setParameter("searchCriteria", "Bill");
b。更改搜索:
String searchCriteria = "p.lastName";
TypedQuery<Person> query = em.createQuery(("SELECT p FROM Person p WHERE " + searchCriteria + " = :name"), Person.class);
query.setParameter("name", "Bill");
*字符串比较,也可以使用LIKE
我对 JPQL 不是很熟悉,但我知道您可以通过执行以下操作来参数化条件:
em.createQuery("SELECT p FROM Person p WHERE p.firstName = :name)
.setParameter("name","Bill");
或者:
em.createQuery("SELECT p FROM Person p WHERE p.firstName= ?1)
.setParameter(1,"Bill");
但是你能参数化其他东西吗?通过参数化 WHERE 子句来说明条件。例如,你可以这样做:
em.createQuery("SELECT p FROM Person p WHERE :criteria = Bill)
.setParameter("criteria","p.lastName");
我测试了上面的代码,但它不起作用,所以我的问题是:有没有办法在 JPQL 中参数化 WHERE 子句。或者是否有任何其他查询语言支持 WHERE 子句参数化?非常感谢!
试试这个
TypedQuery<Person> query = em.createQuery("SELECT p FROM Person p WHERE p.lastName = :lastName", Person.class);
query.setParameter("lastname", "Bill");
如果您想添加更多参数,那么
TypedQuery<Person> query = em.createQuery("SELECT p FROM Person p WHERE p.lastName = :lastName AND p.firstName = :firstName", Person.class);
query.setParameter("lastName", "Bill");
query.setParameter("firstName", "Jack");
创建查询后,您可以使用
query.getResultList();
如果您期待多个结果
或
query.getSingleResult();
如果您只希望得到一个结果(例如按主键或唯一列查询)
For more information, refer to TypedQuery
回答评论中的问题:
一个。要么有三个查询并根据他们在 UI
中选择的内容使用查询String query;
if (isFirstName) {
query = "SELECT p FROM Person p WHERE p.firstName = :searchCriteria"
} else if (isMiddleName) {
query = "SELECT p FROM Person p WHERE p.middleName = :searchCriteria"
} else {
query = "SELECT p FROM Person p WHERE p.lastName = :searchCriteria"
}
TypedQuery < Person > query = em.createQuery(query, Person.class);
query.setParameter("searchCriteria", "Bill");
b。更改搜索:
String searchCriteria = "p.lastName";
TypedQuery<Person> query = em.createQuery(("SELECT p FROM Person p WHERE " + searchCriteria + " = :name"), Person.class);
query.setParameter("name", "Bill");
*字符串比较,也可以使用LIKE