Gle*_*eeb 5 java spring hibernate hql spring-social
使用 Hibernate 和 Spring Social,
我正在尝试通过电子邮件地址查询数据库。当我执行此查询时:
公共帐户 findAccountByUsername(String 用户名) {
Run Code Online (Sandbox Code Playgroud)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:来自masterPackage.model.orm.Account作为帐户,其中account.username = myEmail@gmail.com 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 = myEmail@gmail.com])。重定向到/登录
有办法解决这个问题吗?
总有一种方法可以将电子邮件地址中的@字符保存为其他字符,但我想问是否有比此解决方案更好的方法。
不要连接 HQL 查询。请改用命名参数。它是Hibernate 中查询对象模式的实现。
对于你的情况:
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;
}
Run Code Online (Sandbox Code Playgroud)
Offtop:建议此类方法永远不要返回空值。更好的方法是返回一个空集合。例如 return new ArrayList<>(); 因此,您可以隐式使用空对象模式。
| 归档时间: |
|
| 查看次数: |
5942 次 |
| 最近记录: |