创建使用变量的HQL查询的最佳方法是什么?

时间:2014-06-02 21:16:45

标签: hibernate hql

我最近刚开始在一家新公司工作,我注意到我们正在以这种方式创建HQL查询(使用字符串连接):

final Query query = em.createQuery("SELECT name FROM Foo foo WHERE email_acct_id = \'"
    + emailAccountId + "\'");

我建议我们将这样的查询更改为:

final Query query = em.createQuery("SELECT name FROM Foo foo WHERE email_acct_id = :email")
    .setParameter("email", emailAccountId);

我不想因为我在这里崭露头角而太过摇摇欲坠,所以我需要事实来支持我的建议。这两个查询有什么区别?我认为这与表现有关...

1 个答案:

答案 0 :(得分:3)

你应该总是第二个选择的主要原因是安全性。

当您使用第一个选项时,您的应用程序容易受到SQL Injection的攻击。<​​/ p>

后一个选项更安全,因为当您使用它时,驱动程序将在执行查询之前适当地转义参数。查看this文章。