【问题标题】:JPA query not in subquery relationship tableJPA 查询不在子查询关系表中
【发布时间】:2014-12-01 13:01:23
【问题描述】:

我想知道如何在 JPA 中查询内容不在负责建立多对多关系的“第三个表”内。

示例:

SELECT id FROM A WHERE id NOT IN (SELECT id FROM A_B WHERE idB = @id)

在这种情况下,我有表 A、表 B 和关系多对数 A_B​​p>

我尝试使用 CriteriaQuery 和子查询,但没有成功。实际上,它没有返回任何结果。

有人有这个案例的例子吗?

【问题讨论】:

    标签: java eclipse hibernate jpa-2.0


    【解决方案1】:

    我找到了解决方案!

    我不知道它是否完全正确,所以,如果有人看到错误,请告诉我。

    由 JPA 创建的结束查询变成这样:

    select maingroup0_.GroupId as GroupId1_, maingroup0_.idGroupAttendanceType as idGroupA2_1_, maingroup0_.name as name1_ from TUnPbxGroup maingroup0_ where maingroup0_.GroupId not in  (select maingroup1_.GroupId from TUnPbxGroup maingroup1_ inner join THolidayGroup listholida2_ on maingroup1_.GroupId=listholida2_.GroupId inner join THoliday holiday3_ on listholida2_.IdHoliday=holiday3_.IdHoliday where holiday3_.IdHoliday=2)
    

    代码:

    CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<MainGroup> query = cb.createQuery(MainGroup.class);
        Root<MainGroup> root = query.from(MainGroup.class);
        query.select(root);
    
        Subquery<Long> subquery = query.subquery(Long.class);
        Root<MainGroup> subRoot = subquery.from(MainGroup.class);
        subquery.select(subRoot.<Long>get("id"));
        Join<Holiday, Holiday> maingroups = subRoot.join("listHolidays");       
        subquery.where(cb.equal(maingroups.get("id"), holidayId));      
    
        query.where(cb.not(cb.in(root.get("id")).value(subquery))); 
    
        TypedQuery<MainGroup> typedQuery = em.createQuery(query);
    
        List<MainGroup> result = typedQuery.getResultList();
    

    【讨论】:

    • 我不确定代码示例是否完全正确,但它让我知道了如何解决多对多关系的问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 2015-08-14
    • 2012-07-11
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多