10.5. EJB-QL/HQL での EL の使用
Seam 管理永続コンテキストを使用する場合や
@PersistenceContext でコンテナ管理永続コンテキストをインジェクトする場合は、常に Seam は EntityManager または Session オブジェクトをプロキシします。 これにより、 EL 式をクエリ文字列内で問題なく効果的に使用することができます。 たとえば、 次を見てください。
User user = em.createQuery("from User where username=#{user.username}")
.getSingleResult();
User user = em.createQuery("from User where username=#{user.username}")
.getSingleResult();
上記の例は、 以下の例と同等です。
User user = em.createQuery("from User where username=:username")
.setParameter("username", user.getUsername())
.getSingleResult();
User user = em.createQuery("from User where username=:username")
.setParameter("username", user.getUsername())
.getSingleResult();
警告
以下の形式は使用しないでください。SQL インジェクション攻撃に脆弱性があり、非効率でもあります。
User user = em.createQuery("from User where username=" + user.getUsername()).getSingleResult(); //BAD!
User user = em.createQuery("from User where username=" + user.getUsername()).getSingleResult(); //BAD!