【问题标题】:Why parameter substitution in HQL-Query failed but native type succeeds?为什么 HQL-Query 中的参数替换失败但本机类型成功?
【发布时间】:2011-08-08 21:42:10
【问题描述】:

你们有没有遇到过 HQL 查询中的参数替换不起作用的问题?

我认为我正在使用休眠进行一些从我的 MySQL 数据库中获取实体的简单查询。

这里是查询:

entityManager.
            createQuery("SELECT c FROM PersistentEvent c WHERE c.sessionId LIKE :sessionId").
            setParameter("sessionId", session.getId()).getResultList();

没有结果!在调试中我看到 session.getId() 返回正确的值。

entityManager.
                createQuery("SELECT c FROM PersistentEvent c WHERE c.sessionId LIKE :sessionId").
                setParameter("sessionId", "TestSessionId - 1").getResultList();

适用于存在此类条目的我的测试数据。

有什么建议吗?谢谢

【问题讨论】:

  • 在您的 Hibernate/JPA 设置中打开“show_sql”并发布查询。
  • select persistent0_.id as id0_, persistent0_.date as date0_, persistent0_.description as descript3_0_, persistent0_.sessionId as sessionId0_ from event persistent0_ where persistent0_.sessionId like ? 和 log4j.logger.org.hibernate.type=ALL 的调试输出我得到 [TRACE] - returning 'TestSession - 1' as column: id3_[TRACE] - binding 'TestSession - 1' to parameter: 1
  • 您的硬编码示例传入TestSessionId - 1,而不是查询中的TestSession - 1。会不会是这个问题?
  • 你救了我的夜人。但首先我会刹车。哇!
  • 没问题!为了完整起见,我将我的评论转换为答案。

标签: java sql hibernate persistence hql


【解决方案1】:

在您发布 Hibernate 生成的查询后,我注意到 session.getId() 插入了 TestSession - 1 而不是您的硬编码示例中的 TestSessionId - 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-25
    • 2010-09-20
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多