【问题标题】:How to order by a specific column a MySQL query with Java and Hibernate?如何使用 Java 和 Hibernate 按特定列排序 MySQL 查询?
【发布时间】:2015-06-24 14:09:39
【问题描述】:

我正在尝试使用相同的查询对我的表列进行排序,但是当我将该列作为参数传递给 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 mysql hibernate sql-order-by


    【解决方案1】:

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

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

    【讨论】:

    • 没错,我没想过检查列名是否是有效的列名。这样就安全了。谢谢
    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2011-10-03
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多