当前位置: 首页 > 面试题库 >

如何在休眠本机查询中使用MySQL分配运算符(:=)?

余歌者
2023-03-14
问题内容

我正在使用Hibernate。我写了一些本机查询,因为我需要使用sub select语句。

查询看起来像这样:

SELECT sub.rownum FROM 
    (SELECT k.`news_master_id` AS id, @row := @row + 1 AS rownum 
        FROM keyword_news_list k 
        JOIN (SELECT @row := 0) r 
        WHERE k.`keyword_news_id` = :kid
    ORDER BY k.`news_master_id` ASC) AS sub 
WHERE sub.id  = :nid

当我像这样运行此查询时:

sessionFactory.getCurrentSession()
    .createSQLQuery(query)
    .setParameter("kid", kid)
    .setParameter("nid", nid)
    .uniqueResult();

出现此异常:

org.hibernate.QueryException: Space is not allowed after parameter prefix ':' ....

这可能是因为:=运算符。我发现了一些与此有关的Hibernate问题。这个问题仍然存在。这个问题没有解决办法吗?


问题答案:

您可以用一种稍微不同的方法来实现。.您需要将:运算符替换为其他内容(例如’|’char),然后在拦截器中替换’|’。与:。

这样,hibernate状态将不会尝试认为:是一个参数,但是会忽略它

有关拦截器逻辑,请参阅hibernate手册。

这对我使用MySQL 5很有用。

请记住,:的这种替换只能对’:=’和其他MySQL特定要求进行。.不要试图将:替换为param-placeholders。(然后,hibernate将无法识别参数)



 类似资料:
  • 问题内容: 我想按数据库中的条件计数记录数。 我尝试使用下一个查询 但是没有方法可以执行此操作并获得结果。 我知道,我可以使用 所以问题是,查询是否具有更高的性能?如果,那么如何执行查询呢? 问题答案: 您可以通过调用来执行第一个查询,例如。 如果要将计数分配给变量,则需要将其转换为适当的类型(它可以取决于DB,但很可能是Long)。第二个查询效率很低,因为Hibernate需要从数据库中检索整个

  • 问题内容: 我在使用Hibernate创建子查询时遇到问题。不幸的是Subqueries类几乎完全没有文档,因此我完全不知道如何将以下SQL转换为Hibernate Criteria: 我希望以下内容能够“正常工作”: 但不幸的是,事实并非如此。因此,看来我实际上必须使用Subqueries类来创建Criteria。但是我无法通过Google找到一个合理的例子,因此这使我在这里提出了疑问。 问题答

  • 问题内容: 我将jaybird 2.2.3和hibernate 3.5一起使用,当我使用向导hibernate映射文件和pojos数据库时,出现以下错误“ java.lang.NullPointerException” 我在mysql上使用了相同的映射,并且可以正常工作,所以我相信这是jaybird中的问题 编辑: 有人能帮我吗? 问题答案: 在深入研究了Netbeans的代码并向Jaybird添

  • 问题内容: 我正在将JPA持久性提供程序从EclipseLink 2.3切换到Hibernate 3.6.5.Final。问题出在本机查询上。注意:这不是EclipseLink的问题。我试图从我没有为其声明实体的表中获取一个标量值。这是代码: 使用Hibernate会得到一个,因为返回的对象实际上是一个代理对象。我不知道它是什么类型,但是我知道它不是数组(是false),我也不是列表(is )。

  • 问题内容: sess.createSQLQuery(“INSERT INTO ARCHIVE (folder) VALUES(:folder)”) .setParameter(“folder”,path) .executeUpdate(); 我想要新创建对象的ID。我怎样才能做到这一点? 问题答案: 试试吧 Integer lastId = (Integer) session.createSQLQ

  • 问题内容: 我想知道什么是从hibernate查询中获取地图数组的最佳方法。Google表示要迭代query.list(),然后将对象创建/放入空地图数组。 我想会有一些优雅而有效的方法来做到这一点。有人可以给我个主意吗? 问题答案: 参见Hibernate文档-15.6。select子句: 您可以使用以下方式为选定的表达式分配别名: 与选择新地图一起使用时,这非常有用: 该查询返回一个从别名到所