mysql - 获取的关联中不允许使用 with 子句

标签 mysql hibernate jpa jpa-2.1

我有一个如下所示的名称查询 - 但不断收到来自 Hibernate 的错误,它不允许我的“with”子句,因为我正在执行 join fetch。

我需要加入获取 - 因为它有一个相关的项目,所以我不希望它出现在对象上。

    @NamedQuery(name = "Item.findItem", 
        query = "SELECT DISTINCT(c) FROM Item c " +                 
                "JOIN FETCH c.storeRelations as childStoreRelation " +                                                              
                "LEFT JOIN FETCH c.relatedItems as relatedRelations WITH relatedRelations.store.id = childStoreRelation.store.id " +
                "WHERE c.id = :itemId " +                                                                   
                "AND childStoreRelation.store.id = :storeId " +
                "AND childStoreRelation.deleted <> 'Y' " +
                "ORDER BY c.partnumber "),

建议将“with”部分移到我的 where 子句中 - 但这会导致无效结果。

考虑项目 A,它可能与与之相关的项目相关 - 但对于某些商店而言,这种关系无效。

如果放在 where 子句中,则没有关系的商店将不会显示主要项目,因为 SQL 将由 Hibernate 构建,因此它要求如果存在任何关系,则它们必须对商店有效 - 否则不会获取任何内容: -(

所以经典修复发现很多地方(store.id 为 null 或 store.id = :storeId)都不起作用。

有人有其他解决方法吗?

我正在运行 Hibernate 4.3.11

提前致谢

最佳答案

您不能将 LEFT JOIN FETCH 与子句一起使用。 请删除 WITH 子句并将它们移至 WHERE 子句。

它应该是这样的:

@NamedQuery(name = "Item.findItem", 
    query = "SELECT DISTINCT(c) FROM Item c " +                 
            "JOIN FETCH c.storeRelations as childStoreRelation " +                                                              
            "LEFT JOIN FETCH c.relatedItems as relatedRelations " +
            "WHERE c.id = :itemId " +     
            "AND relatedRelations.store.id = childStoreRelation.store.id" +                                 
            "AND childStoreRelation.store.id = :storeId " +
            "AND childStoreRelation.deleted <> 'Y' " +
            "ORDER BY c.partnumber "),

关于mysql - 获取的关联中不允许使用 with 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761324/

相关文章:

php - 在 php/cakephp 中集成一个可编辑的 pdf

hibernate - 从第三方库映射值对象

hibernate - OODB JPA 实现与 Hibernate 的区别

java - 如何将 Spring Boot 与 MySQL 数据库和 JPA 一起使用?

java - Spring Data JPA 规范中三表连接中允许空集

java - 如何显示表中属性的属性 - Java

python - Mysql查询查找每个月年的计数(id)

mysql - MariaDB:在提交 "Duplicate entry"时隐藏警告 "INSERT IGNORE"

java - 选择给定时间段内的唯一登录

mysql - HTML/PHP 表单和 MySQL 之间的 UTF-8 奇怪行为(印地语)