使用hibernate条件查询ManyToMany关系

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

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

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

以上是 使用hibernate条件查询ManyToMany关系 的全部内容, 来源链接: utcz.com/qa/419816.html

回到顶部