hibernate - uniqueResult默默地失败

时间:2010-01-10 12:18:56

标签: hibernate spring tomcat

我有一个使用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();

谢谢!

3 个答案:

答案 0 :(得分:5)

也许您应该尝试使用记录器查看实际的hibernate查询和参数。您应该进行“调试”的两个记录器是:

  • org.hibernate.SQL
  • org.hibernate.type

将两者放在TRACEALL上并检查记录结果。有关记录器的详细信息,请参阅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()

解决了这个问题

但是我对此肯定不满意:-(。 请告诉我有没有更好的解决方案。谢谢。