【问题标题】:Trouble when using clase WHERE ... IN (list)使用 clase WHERE ... IN (list) 时出现问题
【发布时间】:2017-05-21 19:15:11
【问题描述】:

我在尝试使用 Hibernate 从数据库中检索时遇到问题。我要做的是从问题列表中包含标签tag 的数据库中检索问题(使用带有HSQLDB 的Hibernate)。这是错误:

2017 年 1 月 6 日 19:43:26.021 WARN [http-apr-8080-exec-4] org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions SQL 错误:-5585,SQLState:42585 1 月 6 日-2017 19:43:26.021 错误 [http-apr-8080-exec-4] org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions 格式错误的数字常量:.

这里是查询:

Query query = session.createQuery("FROM Question q WHERE (:someTag) in (q.tagList) ORDER BY (q.creationDate) DESC").setParameter("someTag", tag).setMaxResults(amount);

这里是完整的方法:

public static List<Question> list(Tag tag, int amount){
     Session session = HibernateUtil.getSession();
     Query query = session.createQuery("FROM Question q WHERE (:someTag) in (q.tagList) ORDER BY (q.creationDate) DESC").setParameter("someTag", tag).setMaxResults(amount);
     return query.list();
}

【问题讨论】:

    标签: java hibernate jdbc hsqldb


    【解决方案1】:

    如果您尝试检查列表是否包含元素,则需要使用elements 子句,在这种情况下,查询将如下所示:

    "FROM Question q WHERE :someTag in elements(q.tagList) ORDER BY (q.creationDate) DESC"
    

    【讨论】:

    • 它抛出了意外的令牌:CONTAINS
    • 我已经更新了答案,你现在可以试试elements 吗?
    • 非常感谢!我已经处理这些问题3天了! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2021-10-09
    相关资源
    最近更新 更多