当前位置: 首页 > 知识库问答 >
问题:

在Hibernate的NamedQuery中使用用户定义的变量

胡天佑
2023-03-14

我有任务加载类别(按名称加载)和子类别中的所有产品。使用MySQL后,我创建了SQL查询:

select *
from product
where primaryCategoryID in (
select  categoryID
from    (select * from category) categories,
        (select pv := (select categoryID from category where name = 'Tools') as ID) initialisation
where   find_in_set(parentCategory, pv) > 0
and     pv := concat(pv, ',', categoryID)
union 
select categoryID from category where name = 'Tools'
)

正如你在类别名称中提到的“工具”。它工作得很好,但如果你有任何建议-你非常欢迎。在我的项目中,我正在使用Hibernate,名为Query。问题在于变量@pv。现在它未被编译,并将异常作为“意外令牌…”抛出有人知道如何在NamedQuery中使用变量吗?

共有1个答案

应煌
2023-03-14

Hibernate不支持很多SQL功能。例如,您在查询中使用了不受支持的union。变量也是如此。

尝试使用命名本机查询(参见示例)

对于注释,它可以是这样的(来自上面的示例)

@NamedNativeQueries({
    @NamedNativeQuery(
    name = "findStockByStockCodeNativeSQL",
    query = "select * from stock s where s.stock_code = :stockCode",
        resultClass = Stock.class
    )
})
@Entity
@Table(name = "stock", catalog = "mkyong")
public class Stock implements java.io.Serializable {

并将查询放在注释中

 类似资料:
  • 问题内容: 我只想执行以下Mysql语句 与MySql.Data.MySqlClient 我收到一个致命错误。 当我用任一替换$ sql时 要么 我得到了预期的结果。 我找到了这个问题,但是并不能解决我的问题。 我正在尝试将SQLIse(SQLPSX项目的一部分)移植到MySQL版本MySQLIse。 我想处理任何简单的有效mysql语句。 编辑: 我正在尝试运行sakila- schema.sq

  • 找到价格最高和最低的信息: mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE [email protected]_price OR [email protected]_price; +---------+--------+-------+ |

  • 用户定义变量 数据库支持用户自定义变量,自定义变量使用@开头,能够被用于任何表达式和参数中。变量是不能持久的,作为范围为 session,这就意味着变量只在定义它的那个 session 里是有效的。一个变量通常使用 SET命 令来声明: SET @USER = 'Joe'; 变量也可以通过使用 SET() 方法来改变值。在查询中可以直接使用: SET @TOTAL = NULL; SELECT

  • 在这个问题上我会得到任何帮助的。我已经花了好几个小时没有任何真正的解决办法。我有一个SQL 在表g1中,我对我的数据进行分组,以找到to_place最常见的情况,然后我想按升序排列这些情况(这样我以后就可以在每个to_place类别中选择最常见的前3个)。 问题是用户定义的变量是不可预测的(@rank有时总是1),这可能与这样一个事实有关,即在一个语句中,我不应该引用同一个变量(current_t

  • 问题内容: 我正在尝试执行一个当前在phpMyAdmin中可用的查询,但是使用MySqlAdapter在.NET中执行该查询时不起作用。这是Sql语句。 它使用@rownum对从我的内部标量查询返回的每个不同的行进行编号。但是,如果我在.NET中使用它,则假定@rownum是一个参数并抛出异常,因为我没有定义它。 关于如何解决这个问题的任何想法?还是我获取行号的可能方法? 问题答案: 我发现此博客

  • 本文向大家介绍PHP 用户定义的全局变量,包括了PHP 用户定义的全局变量的使用技巧和注意事项,需要的朋友参考一下 示例 任何函数或类之外的范围都是全局范围。当PHP脚本包含另一个脚本(使用include或require)时,范围保持不变。如果脚本包含在任何函数或类的外部,则其全局变量包含在同一全局范围内,但是如果脚本包含在函数内部,则所包含脚本中的变量位于函数的范围内。 在函数或类方法的范围内,