gpt4 book ai didi

java - 如何使用 Java 和 Hibernate 按特定列对 MySQL 查询进行排序?

转载 作者:行者123 更新时间:2023-11-29 06:25:57 25 4
gpt4 key购买 nike

我正在尝试使用相同的查询对我的表列进行排序,但是当我将列作为参数传递给 ORDER BY 时,它会在我的列名前后添加引号。如果您使用 ORDER BY 参数,则列名必须写在引号之间,否则 MySQL 将忽略它。

要执行的示例或查询:

select * from app_user ORDER BY mobile_token ASC LIMIT 0 , 20

这是 hibernate 发送给 MySQL 的内容:

select * from app_user ORDER BY 'mobile_token' ASC LIMIT 0 , 20

Java 查询:

query = JPA.em().createNativeQuery("select * from app_user ORDER BY :column ASC LIMIT :init , :page",AppUser.class);
query.setParameter("column", column);
query.setParameter("init", pageNumber*pageSize);
query.setParameter("page", pageSize);

我可以通过以下方式更改 NativeQuery:

"select * from app_user ORDER BY "+column+" ASC LIMIT :init , :page"

但这将成为我的应用程序的不安全因素。

最佳答案

您只能将值作为参数传递给查询。不是列名或字段名。这将使数据库无法知道查询中实际使用了哪些列,从而无法准备执行计划。

因此,您使用连接的解决方案是唯一的解决方案。只需确保该列不是来自用户即可。或者,如果它来自用户,则它是一个有效的列名并且允许用户使用它。

关于java - 如何使用 Java 和 Hibernate 按特定列对 MySQL 查询进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31028913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com