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

使用休眠条件查询ManyToMany关系

艾骏
2023-03-14
问题内容

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

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

驾驶员许可证<->许可证类别

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之间的多对多关系。



 类似资料:
  • 问题内容: 我对HQL查询和hibernate有疑问。 我有一个用户类和一个角色类。用户可以具有许多角色。所以我有一个像这样的ManyToMany关系: 在用户类别中: 在角色类中: 此映射创建了存储关系的第三个表(PORTAIL_USERROLE)。像这样一切正常。当我有一个用户时,我将检索角色。 但是,我的问题是:在HQL查询中,如何获得具有特定角色的所有用户?任何类都代表PORTAIL_US

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

  • 问题内容: 我需要使用detachedCriteria进行此SQL查询: 这个想法是从不属于用户的游戏中获取ID。我尝试了与detachedCriteria类似的10种不同方法,但得到了“未知实体:null” MappingException代码应类似于: 还设置投影以仅返回游戏的ID。 有任何想法吗?我认为Hibernate在加入没有别名的查询时会遇到一些麻烦。添加别名是可行的,但结果是完全错误

  • 问题内容: 在我当前的项目中,我遇到了使用hibernate条件查询获取实体的问题。我有以下实体: 教授,其中包含学生名单 学生,其中包含作业列表。 作业,其中包含分配到的学生的ID。 现在,我想获得与教授有关的所有作业,即教授分配给他的学生的所有作业。 此查询显示我要在条件查询中实现的内容。 如何使用hibernate条件API实施此查询? 问题答案: 假设您的表格是这样的: 使用别名的简单示例

  • 问题内容: 任何使用条件/ hql / sql告诉我查询的人。要求是用户输入电子邮件或用户名查询从表user返回用户的密码。 问题答案: 如果您正在做的只是获取一个字段,那么您可能只想执行hql(或者可能是sql)。 如果您符合条件,我相信您将撤回整个对象,只是为了最终使用一个字段。 编辑: 这是一个非常广泛的问题。这是一个教程

  • 问题内容: 我有一堂课; 我还有一节课; 我将如何搜索Student ,名字John,lastName Doe? 如果是出生日期属性,我将在日期上创建一个并添加一个相等限制()。我将如何对AppUser对象中的lastName和firstName进行操作? 问题答案: 查询: 要使用条件,请检查此线程 还可以从hibernate文档中查看此页面