java – 使用Hibernate Criteria查询ManyToMany关系
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用Hibernate Criteria查询ManyToMany关系,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1506字,纯文字阅读大概需要3分钟。
内容图文
![java – 使用Hibernate Criteria查询ManyToMany关系](/upload/InfoBanner/zyjiaocheng/710/96c14eecd82f461d85f127f87534d7c4.jpg)
我不确定如何描述这个问题,所以我认为一个例子是问我问题的最佳方式:
我有两个表与manyToMany关系:
DriversLicence< - > LicenceClass
LicenceClass是“Car”,“Motorbike”和“Medium Rigid”之类的东西.
使用Hibernate Criteria,我怎样才能找到同时拥有“Car”和“Motorbike”LicenceClasses的所有许可证?
更新12/11/2008
我发现使用自定义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生成的表的名称,用于支持driversLicence和LicenceClass之间的多对多关系.
内容总结
以上是互联网集市为您收集整理的java – 使用Hibernate Criteria查询ManyToMany关系全部内容,希望文章能够帮你解决java – 使用Hibernate Criteria查询ManyToMany关系所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。