现在有这么一个关系 Apply类中有个属性xDataEntity(XDataEntity),Apply和XDataEntity是一对一得关系
XDataEntity类中有个fields属性(Set <XDataDetailEntity>)XDataEntity和XDataDetailEntity(属性:name,value)是一对多的关系 现在问题是这样的 我想查询出 Apply.getXDataEntity.getFields集合中必须同时存在对象A(name='a' and value='1') 和对象B(name='b' and value='2')的所有满足条件的Apply的所有记录(哈哈,感觉有点绕),仅存在其中一个对象(A or B)是不符合要求的 这样的要求不知道用HQL怎么写了,感觉很难写,请各位帮忙了,哈哈,多谢了啊 其中我是这样写的:select apply from Apply as apply left outer join apply.xDataEntity.fields as field where (field.name='a' and field.value = 1 ) or (field.name='b' and field.value =2 )这样可以查询出来,但是(仅存在其中一个对象(A or B)是不符合要求的)这样是不合要求啊,哎,不知道怎么写了啊!请大家帮帮忙啊
XDataEntity类中有个fields属性(Set <XDataDetailEntity>)XDataEntity和XDataDetailEntity(属性:name,value)是一对多的关系 现在问题是这样的 我想查询出 Apply.getXDataEntity.getFields集合中必须同时存在对象A(name='a' and value='1') 和对象B(name='b' and value='2')的所有满足条件的Apply的所有记录(哈哈,感觉有点绕),仅存在其中一个对象(A or B)是不符合要求的 这样的要求不知道用HQL怎么写了,感觉很难写,请各位帮忙了,哈哈,多谢了啊 其中我是这样写的:select apply from Apply as apply left outer join apply.xDataEntity.fields as field where (field.name='a' and field.value = 1 ) or (field.name='b' and field.value =2 )这样可以查询出来,但是(仅存在其中一个对象(A or B)是不符合要求的)这样是不合要求啊,哎,不知道怎么写了啊!请大家帮帮忙啊
解决方案 »
- 关于mybatis批量插入的SQL问题,请高手解答
- jdbc 还是hibernate?
- 工厂模式,我所定义的抽像方法,public abstract Board InitBoard();出现了问题
- spring quartz不自动运行的问题
- flash轮换广告问题
- 请教高手一个问题!!!!!!!!!!!!!!!!!!!!!!!!!
- tomcat 5.5启动问题
- struts中怎么用过滤器处理中文问题
- 在线请教!
- JBuilder8用向导生成的.jsp文件怎么不能修改?
- 我在Java的后台中设置的cookie,在页面如何使用JavaScript得到?
- insert ")statement" to complement ifStatement
或者
只查apply.xDataEntity.fields 字段 自连接查询。
+ "where field.name='a' and field.value = 1"; String hql2 = "select apply from Apply as apply left outer join apply.xDataEntity.fields as field "
+ "where field.name='b' and field.value =2"; Query query1 = session.createQuery(hql1);
Query query2 = session.createQuery(hql2); List<Apply> applys1 = (List<Apply>) query1.list();
List<Apply> applys2 = (List<Apply>) query2.list();
6. 然后将上面的两个List经过一些处理后放入一个HashSet里,就可以满足楼主的要求了:for (Apply apply1 : applys1) {
for (Apply apply2 : applys2) {
if (apply2 == apply1) {
applySet.add(apply2);
}
}
} for (Apply apply : applySet) {
for (XDataDetailEntity detailEntity : apply.getxDataEntity()
.getFields()) {
System.out.println(detailEntity.getName() + " "
+ detailEntity.getValue());
}
}7. 上面代码的根据是,如果一个Apply的对象即在applys1里(满足条件:name='a' and value='1'),又在applys2里(满足条件:name='b' and value='2'),那么这个对象就是我们想要的。8. 上面代码用到了:
if (apply2 == apply1) {
applySet.add(apply2);
}
它的依据是:
如果两个对象(A and B)有同样的数据库ID 并且在同一个Session里, 我们可以推出 A == B以上想法很不成熟,希望大家不要见笑。
上面这个hql相当于:
SELECT * FROM orders where id = 2 and id = 3;
这样的查询会有结果吗?
直接用hibernate的原生sql查询