我有一个使用hibernate uniqueResult方法的登录控制器。当我在eclipse的tomcat服务器上测试它时,一切正常。但是当我将我的webapps部署到tomcat服务器(在同一台机器上)时,它会失败:即使我使用正确的凭证,它也总是返回null。
这是我的hibernate代码:
session.createCriteria(User.class)
.add(Restrictions.eq(User.USERNAME_FIELD, userName))
.add(Restrictions.eq(User.PASSWORD_FIELD, password)).uniqueResult();
谢谢!
答案 0 :(得分:5)
也许您应该尝试使用记录器查看实际的hibernate查询和参数。您应该进行“调试”的两个记录器是:
org.hibernate.SQL
org.hibernate.type
将两者放在TRACE
或ALL
上并检查记录结果。有关记录器的详细信息,请参阅the hibernate documentation。
最常见的情况是log4j。 AFAIK,hibernate.show_sql
已被弃用。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="Stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<logger name="org.hibernate.SQL">
<level value="TRACE"/>
</logger>
<logger name="org.hibernate.type">
<level value="TRACE"/>
</logger>
<root>
<level value="INFO"/>
<appender-ref ref="Stdout"/>
</root>
</log4j:configuration>
答案 1 :(得分:1)
没有足够的信息,尝试跟踪正在生成的SQL:
在log4j.properties
log4j.logger.org.hibernate.SQL=TRACE
log4j.logger.org.hibernate.type=TRACE
或者设置这些Hibernate属性
hibernate.show_sql=true
hibernate.format_sql=true
然后尝试运行这些查询,传递的参数直接在数据库中返回null。
答案 2 :(得分:0)
我通过添加session.flush()
但是我对此肯定不满意:-(。 请告诉我有没有更好的解决方案。谢谢。