2014-03-24 102 views
0

我使用Hibrnate核心4.3.0。休眠4.3.0.Final:选择多个表

我有2张表;由表B n的与自身

我有这样的结构:表A被相关的并购

表A

  • ID:主键
  • NAME:元素的名称
  • STATE

    • * ID_SOURCE *:FK表A
    • * ID_TARGET *:FK到表中的元件

    表B的状态A

  • * RELATION_NAME *:关系类型的名称

在表B中,主键是由ID_SOURCE和ID_TARGET组成的组合键。

现在我已经能够创建所有正确映射的类;现在I'ld喜欢让下面的查询:

select 
    ID, 
    NAME, 
    STATE 
from 
    TABLE_A this1, TABLE_B src1_ 
where 
    src1_.ID_SOURCE=4018 
    and src1_.ID_TARGET=this1.ID 

现在我知道我可以使用HQL和/或本地SQL,以创建此类查询的,但I'ld喜欢使用Hibernate的标准或更好DetachedCriteria

是否有可能通过使用DetachedCriteria创建此类查询?

谢谢

安杰洛

+0

你有没有试过?什么失败或者你不明白什么?因为现在答案是“是”。 – mabi

+0

@mabi是的,我尝试了几种组合,但不成功,我越来越确定,通过使用DetachedCriteria它不可能创建这样的查询....你有任何代码片段,我可以采取灵感 –

回答

0

我猜我发现通过调用setFetchMode来做到这一点;基本上我写这个的DetachedCriteria(注:我映射与fetch=FetchType.LAZY的关系字段):

select 
    b.ID_SOURCE, 
    b.ID_TARGET, 
    b.RELATION_NAME, 
    a.ID, 
    a.NAME, 
    a.STATE 
from 
    B b 
inner join 
    A a on b.ID_TARGET=a.ID_ENTITY 
where 
    b.ID_SOURCE=? 

现在我想知道什么是表演:

DetachedCriteria dc = DetachedCriteria.forClass(B.class); 
dc.setFetchMode("tgtA", FetchMode.JOIN); 
dc.add(Property.forName("srcA.id").eq(4018l)); 

这在下面的查询休眠了改造当我执行这种查询....这是正确的方式来做到这一点?

谢谢

安杰洛