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

标签 java mysql sql hibernate named-query

我的任务是加载类别(按名称加载)和子类别中的所有产品。使用 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,命名查询。问题在于变量@pv。现在它没有被编译并抛出异常“意外的标记...” 有谁知道如何在 NamedQuery 中使用变量?

最佳答案

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

尝试使用命名 native 查询(请参阅 example)

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

@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 {

并将您的查询放入注释中

关于java - 在 Hibernate 的 NamedQuery 中使用用户定义的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983764/

相关文章:

java - 如何从二进制文件分发 ubuntu 运行 tomcat

mysql连接其中一个字段是另一个表中字段的一部分

mysql - Rails 连接查询不像 SQL 连接查询那样响应

mysql - 如何将SQL结果转换为百分比

php - SQL 喜欢这个或那个

java - 如何使用末尾带点的键?

java - 检查电子邮件是否在数据库中,否则将用户名和密码存储在数据库中

java - android - 倒计时后打开 Activity

mysql - 监控命令行操作的进度

sql - 按日期字段的月份排序记录