java - 两个或多个参数的 setParameter 在 Jpa 中不起作用(Mysql 注入(inject))

标签 java hibernate jpa

大家好...我正在寻找一种方法来避免 jpa 中的 mysql 注入(inject)...并得到了一个链接 http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-persistence-api-jpa这很酷...并且对于单个参数工作正常,这是代码...

            StringBuilder getCity = new StringBuilder();
            getCity.append("SELECT ");
            getCity.append(" CITY.* ");
            getCity.append("FROM  ");
            getCity.append(" CITY  ");
            getCity.append("WHERE ");
            getCity.append("CITY.NAME LIKE ?1");
            System.out.println(getCity.toString());
            getSearchQuery=entityManager.createNativeQuery(getCity.toString(),CityModel.class).setMaxResults(1);
            getSearchQuery.setParameter(1,QueryToSearch);
            City=(CityModel)getSearchQuery.getSingleResult();

这是其他代码,其中有两个参数..

getCity.append("SELECT ");
            getCity.append(" CONCAT_WS('<br />',CITY.NAME,CITY.ADDRESS) ");
            getCity.append("FROM  ");
            getCity.append("CITY  ");
            getCity.append("WHERE ");
            getCity.append(" (CITY.NAME LIKE ");
            getCity.append(" ?1 OR CITY.ADDRESS LIKE ");
            getCity.append(" ?2)");
            getCity.append(" AND ");
            getCity.append(" CITY.STATUS=");
            getCity.append("'"+"ACTIVE"+"'");
            getCity.append(" AND CITY.TYPE= ?3");
            System.out.println(getCity.toString());
            getSearchQuery=entityManager.createNativeQuery(getCity.toString());
            getSearchQuery.setParameter(1,QueryToSearch);
            getSearchQuery.setParameter(2,QueryToSearch);
            getSearchQuery.setParameter(3,CityType);

注意:即使在第二个查询中,如果我只输入一个 LIKE...(多个 like 和参数不起作用),即使在第二个查询中也能正常工作,只是好奇查询中的 LIKE ?1 是如何工作的 %Type% 或 %Type 或 Type :)

最佳答案

对于 future 想要在 jpa 原生查询中使用 LIKE 的用户

错了...

 getSearchQuery.setParameter(1,QueryToSearch);
 getSearchQuery.setParameter(2,QueryToSearch);
 getSearchQuery.setParameter(3,CityType);

右边一个

 getSearchQuery.setParameter(1,"%"+QueryToSearch+"%");
 getSearchQuery.setParameter(2,"%"+QueryToSearch+"%");
 getSearchQuery.setParameter(3,CityType);

关于java - 两个或多个参数的 setParameter 在 Jpa 中不起作用(Mysql 注入(inject)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31400927/

相关文章:

java - gradlew appengineEndpointsInstallClientLibs 有错误 Execution failed for task ':compileJava' 。 > 无效源版本 : 1. 7

java - 服务类和 DAO 类在做同样的事情。为什么你需要他们两个?

java - org.dom4j.DocumentException : Connection timed out: connect and Nested exception: Connection Nested exception

java - 单个或多个实体管理器

java - 如何使用 Hibernate 和 Spring Data JPA 正确注释两个实体之间的关系?

java - "must implement the inherited abstract method"

java.lang.NoClassDefFoundError : org. eclipse.core.runtime.RegistryFactory

java - 首先压缩和解压缩相同的压缩数据会给出不同的结果

java - Hibernate:如何在Hibernate中删除多行?

java - Dozer 映射和 Hibernate 惰性初始化