当前位置: 首页 > 面试题库 >

准备好的语句,休眠和HQL

白子明
2023-03-14
问题内容

在将HQL转换为SQL时,Hibernate在JDBC内部使用PreparedStatement。HQL中的内联参数如何处理?

例:

  public List<Student> loadAllStudentsByStatus(String status) {
    String queryString = "FROM Student student WHERE student.status = " + status;
    Query queryObject = currentSession().createQuery(queryString);
    return queryObject.list();
  }

将状态“解析”并用作SQL中的参数,或者将其作为内联参数发送。

我的观点背后的原因是“最佳做法”,以及针对重复调用的查询性能


问题答案:

它被内联发送。当status是客户端控制的值时,您绝对不希望这样做。

而是将其参数化:

return currentSession()
    .createQuery("FROM Student student WHERE student.status = :status")
    .setParameter("status", status)
    .list();

也可以看看:

  • OWASP-hibernate


 类似资料:
  • 问题内容: 在JPA(以及JBoss 5中包含的其余Hibernate软件包)中使用Hibernate 3.3.2GA时出现奇怪的性能问题。 我正在使用本机查询,并将SQL组装为准备好的语句。 SQL有很多联接,但是实际上非常基本,只有一个参数。喜欢: 该查询将在一秒钟内在MSSQL Studio上运行。 如果我加 查询将暂停9秒 但是,如果我只替换“?” 值(使其不是Prepared State

  • 问题内容: 我有一个使用准备好的语句的Doctrine_RawSql查询。但是,当生成SQL查询时,它们似乎会被忽略。但是,如果我忽略了标记值,则会得到关于不匹配的绑定变量数量的异常(因此,至少是试图将它们包含在内)。 如果我内联包含这些值,Doctrine是否在幕后做任何事情以防止SQL注入? 这是我的代码: 这提供了以下SQL输出: 编辑:上的属性已正确设置。如果我对参数进行硬编码: 我遇到了

  • 假设上面的代码是我的查询。什么是一个安全的替代方案,将允许自动增加在mySQL数据库。

  • 我有以下准备的一个准备好的声明失败了... 我在我的第一份准备好的声明中几乎有同样的准备,而且它进行得很好。我不确定是否我有两个准备好的声明,如果这是造成一个问题,或情况可能是什么? 现在我有个错误... 更新-可能的内部连接,像这样?

  • 问题内容: 我刚刚开始做我的第一个项目(很有趣)。我正在学习PHP和MySQL,并且已经完成了我的第一个正常工作的应用程序。它可以工作,但是我现在正在学习如何保护应用程序的安全,从而防止SQL注入。我大约有50多个PHP文件来管理与MySQL数据库的交互。它们看起来都是这样的: 这是我在整个应用程序中用于向数据库读写数据的格式。如果我需要将它们更改为准备好的语句,而不是在其中插入任何信息,而只是在