sql - 在连接字符串上设置 JPA 查询参数
问题描述
所以我对最好的做法有点困惑:
我正在使用基于 Primefaces 的 Web 框架,并且我的页面包含一个数据表组件。该组件链接到实现加载方法的支持 bean:
public List<TableElement> loadTableElements(int firstElementIndex, int pageSize,
String sortField, SortOrder sortOrder, Map<String, Object> filters) {
// pass parameters for pagination, filtering and sorting to some service
return tableService.loadTable(firstElementIndex, pageSize, sortField, sortOrder, filters)
}
所以现在我有用户输入(过滤部分),它被传递给我想从数据库中获取数据的某个服务。
现在服务方法看起来像这样,但我担心 SQL 注入。该解决方案将使用参数化查询而不是连接潜在的恶意字符串,但是考虑到 SQL 语句广泛依赖于参数,我很难构建它们:
public List<TableElement> loadTable(int firstElementIndex, int pageSize,
String sortField, String sortOrder, Map<String, Object> filters) {
String queryString = "SELECT Table.id, Stuff.stuffles FROM Table " +
"LEFT JOIN Stuff ON Table.stuff_id = Stuff.id ";
queryString += addSorting(sortField, sortOrder);
queryString += addFiltering(filters);
...
Query query = entityManager.createNativeQuery(queryString, "TableElement");
}
现在我希望你能看到我遇到的问题:我可以用占位符构建一个字符串,但我只能在构建查询字符串时替换它们。但是我没有关于设置多少参数和哪些参数的信息。
我想有一些简单的解决方案,但我现在没有看到它。提前致谢!
解决方案
推荐阅读
- string - 字符替换
- google-cloud-platform - 根据环境在 Micronaut 中设置 Pub Sub 主题
- javascript - Javascript - 以通用方式更新深层复杂对象
- c - 在visual studio代码上设置“Per Monitor DPI Aware”?
- reactjs - 有没有办法将变量值从一个反应组件传递到另一个?
- c# - IIS .NET Core 5.0 MVC API - 出现 HTTP 错误 500.30 - ASP.NET Core 应用程序无法启动
- cypress - 赛普拉斯有没有办法检查开放请求?
- python - 返回值和跟踪内部状态时如何使用 Python super()?
- installation - 使复选框的行为类似于单选按钮,但默认选择其中一个部分 - NSIS 组件页面
- bash - 如何使 apt 假设是并强制 bash 脚本中的所有安装是