本机查询问题

Posted

技术标签:

【中文标题】本机查询问题【英文标题】:native query issues 【发布时间】:2018-12-29 18:07:53 【问题描述】:

我想创建一个条件查询,我可以在其中根据方法参数设置不同的实体属性和不同的值。

public List<Customer> searchBar(String entityProperty, String value) 

    String nativeQuery = "SELECT * FROM devices WHERE customer_id IN (SELECT customers.id FROM customers WHERE ? = ?)";
    Query query = session.createNativeQuery(nativeQuery);
    query.setParameter(1, entityProperty);
    query.setParameter(2, value);
    return query.getResultList();

你可以假设:

String entityProperty = "phoneNumber"
   String value = "222222222"

当我尝试这种方式时,我得到一个空结果,但如果我在 nativeQuery 语句上硬编码 entityProperty,它会正常工作:

String nativeQuery = "SELECT * FROM devices WHERE customer_id IN (SELECT customers.id FROM customers WHERE phoneNumber = ?)";
Query query = session.createNativeQuery(nativeQuery);
query.setParameter(1, value);
return query.getResultList();

感谢您的宝贵时间:)

【问题讨论】:

【参考方案1】:

setParameter 用于设置列的值,但不用于列名。使用通用Java动态组合列名。如下所示,你应该明白了:

public List<Customer> searchBar(String entityProperty, String value) 

    String nativeQuery = String.format("SELECT * FROM devices WHERE customer_id IN (SELECT customers.id FROM customers WHERE %s = ?)",entityProperty);
    Query query = session.createNativeQuery(nativeQuery);
    query.setParameter(1, value);
    return query.getResultList();

【讨论】:

以上是关于本机查询问题的主要内容,如果未能解决你的问题,请参考以下文章

使用本机查询从 Spring Data 返回自定义对象

OpenJPA:JPQL 与本机查询

从本机查询返回单个投影

jpa命名本机查询无结果

查询本机 - 无法提取 ResultSet

Hibernate:本机 SQL 查询重复列结果