Hibernate Criteria 级联查询(含子查询和联合主键) 10

TABLEA(id,type1,type2)id是主键TABLEB(idType1,idType2)其中(idType1,idType2)是联合主键eg:Aidtype1... TABLE A ( id, type1, type2) id 是主键
TABLE B (idType1,idType2) 其中 (idType1,idType2) 是联合主键
eg:
A id type1 type2
1 t1 null
2 null t2
3 t1 null
4 null t2

B :
idType1 idType2
1 2
1 4
3 2
3 4

SELECT
a.*
FROM
A a
WHERE
a.type1 = 't1'
and a.id in (
SELECT
b.idType2
FROM
B b
WHERE
b.idType1 = 1
)

请用 Hibernate 的 Criteria 来实现这句SQL
要直接拿到结果集。不要先搜出来 List<Long> idType2 作为条件再作第二次搜索
Criteria criteria = this.getSession().createCriteria(A.class);

DetachedCriteria detachedCriteria = DetachedCriteria.forClass(B.class); detachedCriteria.setProjection( Projections.projectionList()
.add(Projections.groupProperty("id.idType2"))
);
detachedCriteria.add(Restrictions.eq("id.idType1", aid));

criteria.add(Subqueries.propertyIn("id", detachedCriteria));
criteria.add(Restrictions.eq("type1", a.type1));

if (criteria.list().size() > 0) {
return (A) criteria.list().get(0);
} else {
return null;
}

这个事我目前的做法, 但是总是报 类型转换错误(String -> Long),不知道怎么解决, 我也不清楚是不是当中有哪一步写错了或者漏了什么。 请高手指教!
展开
 我来答
云中游民
2012-04-10 · TA获得超过602个赞
知道小有建树答主
回答量:697
采纳率:33%
帮助的人:616万
展开全部
你那几个字段哪个是long型哪个是string型?是hibernate报错还是java报错?
追问
id 是 Long
type 都是 String
idType 都是 Long

hibernate 的错。

昨天 怎么都不行,但是今天早上过来试了一下居然又通过了。。。 so weird!!
追答
.....
那只能恭喜你通过了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
切糕省的荷兰人
2012-04-10
知道答主
回答量:34
采纳率:0%
帮助的人:10.3万
展开全部
你用SQL吧
更多追问追答
追问
用 SQL  就 不头疼了。  客户的需求,只能用 Criteria 不能用 Query
追答
HQL都是操作数据表映射到实体类的 你还是取出来一个集合在程序里操作吧 本来Hibernate 就不太好用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liulangyu_23
2012-04-12
知道答主
回答量:17
采纳率:0%
帮助的人:4.9万
展开全部
还没用过Projections聚合查询, 改天试试....
追问
其实,个人觉得,如果不是客户需求,或者其他特殊的要求(比如要用hibernate来兼容各种不同的数据库)的话,还是SQL最好用 最实惠。。
追答
从技术角度来说,SQL固然简单、实惠。不过作为技术研究来说还是学学比较好啊。:D
客户没有要求我一般会根据进度情况来决定我所用的技术,因为客户是不可能知道我使用哪一种技术来实现的。如果有要求性能的,则看是否符合性能要求,如果在性能要求范围之内则无所谓
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式