Hibernate 在 HQL 中处理“@”字符时遇到困难

2023-11-26

使用 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(使用前将#替换为@)

Hibernate 在 HQL 中处理“@”字符时遇到困难 的相关文章

随机推荐