【发布时间】:2017-04-30 14:32:18
【问题描述】:
我正在尝试从他的电子邮件中获取用户,该电子邮件在数据库中是唯一的。
我写了这段代码:
session.beginTransaction();
User user = (User) session.createQuery("select * from `user` where email = '"+email+"'");
session.getTransaction().commit();
这段代码对吗?或者休眠中有一些函数可以按列值获取实体?
【问题讨论】:
-
创建查询应该是您要查找的内容,除非电子邮件是 ID,否则您可以使用
get。但请注意,出于安全原因,您不应简单地将电子邮件放入字符串中。您应该使用参数,如下所述:stackoverflow.com/questions/4340346/… -
不,这是不对的。 createQuery 需要一个 JPQL 查询。而且你通过的不是JPQL。学习 JPQL:docs.jboss.org/hibernate/orm/current/userguide/html_single/…。还要学习使用查询参数而不是串联,因为您的代码容易受到 SQL/JPQL 注入攻击。最后,如文档所述,createQuery 返回的是查询,而不是用户。您需要使用 getResultList() 或 getSingleResult() 执行该查询。
-
确实我没有注意到查询的具体写法,但
createQuery仍然是这里使用的方法。