Hibernate 4.3.0.Final:在多个表上选择

时间:2014-03-24 19:11:50

标签: hibernate

我正在使用Hibrnate核心4.3.0。

我有2张桌子;表A与表B相关的M:N

我有这个结构:

表A

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

表B

  • * ID_SOURCE * :FK到表A
  • * ID_TARGET * :FK到表A
  • * RELATION_NAME * :关系类型的名称

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

现在我已经能够创建正确映射的所有类;现在我很乐意做出以下询问:

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

现在我知道我可能会使用HQL和/或本机SQL来创建这种查询,但我很乐意使用Hibernate Criteria或更好的DetachedCriteria

是否可以使用DetachedCriteria创建此类查询?

谢谢

安吉洛

1 个答案:

答案 0 :(得分:0)

我想我找到了使用setFetchMode的方法;基本上我写了这个DetachedCriteria(注意:我用fetch=FetchType.LAZY映射了关系字段):

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

在以下查询中,hibernate对此进行了转换:

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=?

现在我想知道当我执行这种查询时的表现是什么......这是正确的方法吗?

谢谢

安吉洛