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

使用hibernate条件查询ManyToMany关系

华泳
2023-03-14
问题内容

我不确定如何描述这个问题,所以我认为举个例子是问我问题的最好方法:

我有两个表具有多对多关系:

驾驶执照<-> LicenceClass

LicenceClass是“汽车”,“摩托车”和“中型刚性”之类的东西。

使用Hibernate Criteria,如何找到同时具有“汽车”和“摩托车” LicenceClasses的所有许可证?

2008年12月11日更新我发现可以使用自定义ResultTransformer轻松实现这一点。但是,问题在于结果转换器仅在查询返回其结果之后才应用,而实际上并没有成为SQL的一部分。所以我想我的问题是“您能执行我最初在SQL中描述的内容吗-
是否有Hibernate Criteria类似物?”


问题答案:

这是我最终使用HQL实现它的方式:

public List<DriversLicence> findDriversLicencesWith(List<LicenceClass> licenceClasses) {
    String hqlString = "select dl from DriversLicenceImpl dl where 1=1 ";
    for (int i = 0; i < licenceClasses.size(); i++) {
        hqlString += " and :licenceClass" + i + " = some elements(dl.licenceClasses)";
    }

    Query query = getSession().createQuery(hqlString);
    for (int i = 0; i < licenceClasses.size(); i++) {
        query.setParameter("licenceClass" + i, licenceClasses.get(i));
    }
    return query.list();
}

或通过sqlRestriction使用Hibernate Criteria:

for (LicenceClass licenceClass : licenceClasses) {               
    criteria.add(Restrictions.sqlRestriction("? = some(select " + LicenceClass.PRIMARY_KEY + " from " +
                    LICENCE_CLASS_JOIN_TABLE + "  where {alias}." +
                    DriversLicence.PRIMARY_KEY + " = " + DriversLicence.PRIMARY_KEY + ")",
                    licenceClass.getId(), Hibernate.LONG));
}

LICENCE_CLASS_JOIN_TABLE是hibernate生成的表的名称,该表支持driverLicence和LicenceClass之间的多对多关系。



 类似资料:
  • 问题内容: 我不确定如何描述这个问题,所以我认为举个例子是问我问题的最好方法: 我有两个表具有多对多关系: 驾驶员许可证<->许可证类别 LicenceClass是诸如“汽车”,“摩托车”和“中型刚性”之类的东西。 使用Hibernate Criteria,如何找到同时具有“汽车”和“摩托车” LicenceClasses的所有许可证? 2008年12月11日更新我发现可以使用自定义ResultT

  • 我需要将以下查询转换为hibernate条件查询。请帮忙 由于投票表上的复合主键,我用@Embeddable分隔了主键,所以后面的createQuery不起作用 和可嵌入对象 请建议一个更好的方法。

  • 我正在尝试将下面的嵌套查询转换为Hibernate Criteria,但无法做到。实际上,尝试对结果集中的行进行计数和求和。 有人有什么想法吗? 提前谢谢。 下面是为上述查询编写的标准, > 对于select main query, 对于内部查询填充结果集并传递给主查询, 但如何将这个子查询传递给主查询还不清楚。

  • subcompany.hbm.xml 子单位表 branch.java 指定表 我需要帮助编写条件查询使用提供的SQL。

  • 问题内容: 我有以下实体 以下是我的行动 我想获取具有特定操作集的规则列表,我正在尝试执行此操作 但是获取org.hibernate.MappingException:集合不是一个关联:异常。 编辑 因此,在jbrookover的指导下,我尝试为Action命名为RuleAction的包装器类,并能够建立一个oneToMany关系,此外,我还如下修改了查询 但是,这将返回所有具有EMAIL或POS