大家好...我正在寻找一种方法来避免 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/