使用 Hibernate 和 Spring Social,
我正在尝试通过电子邮件地址查询数据库。
当我执行此查询时:
公共帐户 findAccountByUsername(String 用户名) {
Session session = sessionFactory.getCurrentSession();
String selectQuery = "FROM Account as account WHERE account.username = "+username;
Query query = session.createQuery(selectQuery);
@SuppressWarnings("unchecked")
List<Account> results = query.list();
if (!results.iterator().hasNext())
return null;
return results.iterator().next(); }
我得到这个异常
2013-01-22 14:37:13,090 [DEBUG] [HibernateTransactionManager,doBegin(),569] - 将 Hibernate 事务公开为 JDBC 事务 [com.mchange.v2.c3p0.impl.NewProxyConnection@3b249bb2]
2013-01-22 14:37:13,352 [DEBUG] [QueryTranslatorImpl,parse(),272] - parse() - HQL: FROM masterPackage.model.orm.Account 作为帐户 WHERE account.username =[电子邮件受保护]2013-01-22 14:37:13,383 [DEBUG] [AbstractPlatformTransactionManager,processRollback(),843] - 启动事务回滚
2013-01-22 14:37:13,384 [DEBUG] [HibernateTransactionManager,doRollback(),672] - 回滚会话上的 Hibernate 事务 [org.hibernate.impl.SessionImpl@294a7134]
2013-01-22 14:37:13,385 [调试] [JDBCTransaction,rollback(),186] - 回滚
.......
2013-01-22 14:37:18,818 [警告] [ProviderSignInController,oauth2Callback(),177] - 处理 OAuth2 回调时出现异常(意外字符:'@' [FROM masterpackage.model.orm.Account as account WHERE account.username =[电子邮件受保护]])。重定向到/登录
有办法解决这个问题吗?
总有一种方法可以将电子邮件地址中的@字符保存为其他字符,但我想问是否有比此解决方案更好的方法。
不要连接 HQL 查询。使用命名参数反而。它是一个实现查询对象模式在休眠状态下。
对于你的情况:
Session session = sessionFactory.getCurrentSession();
String selectQuery = "FROM Account as account WHERE account.username = :usernameParam";
Query query = session.createQuery(selectQuery);
query.setParameter("usernameParam", username);
@SuppressWarnings("unchecked")
List<Account> results = query.list();
if(results.isEmpty()){
return null;
} else {
return result;
}
Offtop:建议永远不要回来null这种方法的价值。更好的方法是返回一个空集合。例如 return new ArrayList();因此您可以使用空对象模式隐含地。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)