与hibernate和spring社交一起工作,
我正在尝试通过电子邮件地址查询数据库。当我执行此查询时:
公共帐户findAccountByUsername(String username){
Session session = sessionFactory.getCurrentSession(); String selectQuery = "FROM Account as account WHERE account.username
= “+username;
Query query = session.createQuery(selectQuery);
@SuppressWarnings(“unchecked”)
Listresults = 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作为帐户WHERE
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]-在会话[org]上回滚Hibernate事务.hibernate.impl.SessionImpl
@ 294a7134] 2013-01-22 14:37:13,385 [DEBUG]
[JDBCTransaction,rollback(),186]-回滚.......
2013-01-22 14:37:18,818 [WARN]
[ProviderSignInController,oauth2Callback(),177]-处理OAuth2回调时发生异常(意外字符:’@’[FROM
masterpackage.model.orm.Account作为帐户WHERE account.username =
myEmail@gmail.com])。html" target="_blank">重定向到/ signin
有办法解决此问题吗?
总有一种方法可以将电子邮件地址中的@字符另存为其他字符,但是我想问是否有比该解决方案更好的东西。
不要连接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;
}
Offtop: 建议永远不要为这种方法返回 null 值。更好的是返回一个空集合。例如,返回new ArrayList <>();
因此,您可以隐式使用Null Object模式。
我正在使用hibernate 4.x,想在HQL查询中设置MySQL的“SQL_NO_CACHE”语句 目前生产 但我想要 但我不知道怎么做。 使用本机查询没有问题,但所有查询都是用HQL编写的,比本例复杂得多。因此,我得到了一个<code>QuerySyntaxException:意外的标记</code>异常,因为在hibernate文档中无论如何都没有记录该语句。 http://docs.jb
persistence.xml文件 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“>org.hibernate.ejb.hibernatePersistence
问题内容: 是否可以将HQL和Criteria API混合使用? 我有一个包含HQL中的where条件的,并且已经构建并从其他地方获取了。我想知道是否可以将where条件添加到中。where条件可以是多个条件“与-或-” /“或-或”在一起。 我可以在不解析where条件的情况下执行此操作吗? 问题答案: 您可以使用Restriction.sqlRestriction(字符串sql)。
问题内容: 我正在使用和。我以前在sql中使用过正则表达式,现在是我第一次在HQL中使用它。 这是我的hql,当我不带功能运行它时,它按预期运行。但是我不能用表达式执行它。 它说.. 嵌套的异常是org.hibernate.hql.ast.QuerySyntaxException:意外的AST节点:(靠近第1行,第66列..... 请帮助,如何在hibernate本机查询中使用?或其他替代方法。
问题内容: 有没有办法使用HQL在Grails中使用hibernate命名查询? 我已经在《利用hibernate》一书中阅读了有关它们的内容,想知道是否有办法在Grails中使用它们。 像这样的映射文件中包含命名查询以及类映射: 现在,我确定可以包含一个 hibernate映射文件, 并将其集成到Grails GORM配置中,因为在此声明,包含 hibernate映射文件的 可以在Grails中
我正在使用oracle 10g和hibernate 3.3.2。我以前在sql中使用过正则表达式,现在我第一次在HQL中使用它。 这是我的hql,当我在没有类似regex_的函数的情况下运行它时,它会按预期运行。但我无法用类似正则表达式的表达式执行它。 它说... 嵌套异常是org.hibernate.hql.ast.QuerySynTaxException:意外的AST节点:(靠近第1行,第66