0

我的数据库中有以下表结构:

 Table A:                     Table B:                       Table C:
 _______________________      ______________________________  ______________________
 | Field | Type | Key  |     | Field | Type | Key          |  | Field | Type | Key  |   
 ______________________|     |_____________________________|  |_____________________|
 | a_id  | Int  | PRI  |     | a_id  | Int  | FK of A(a_id)|  | c_id  | Int  | PRI  |
 |     ...       ...   |     | c_id  | Int  | FK of C(c_id)|  |       ...           |
 |_____________________|      ______________________________  |_____________________|

和对象:

  class A {
        List<C> list;
        ...
   }

现在我想从数据库中接收一个对象 A,其中包含由表 B 组合的所有 C 对象。我有接收正确对象 A 的标准,但我不知道如何接收相应 C 对象的列表:

    Criteria crit = ...;
    A a = crit.uniqueResult();

这是给我正确结果的 SQL 查询,现在应该在标准中“翻译”:

 select c.* 
 from A as a, 
      B as b, 
      C as c 
 where a.a_id = b.a_id and b.c_id = c.c_id;

有谁知道如何制定标准?

4

1 回答 1

1

如果你有

class A {
    List<C> list;
    ...
}

并且两者A都是Cs @Entity,您的标准必须如下所示:

// Create criteria on class A
Criteria criteria = session.createCriteria(A.class);

在这一刻,如果您执行 a criteria.list(),您将获得所有A对象,每个对象都有一个C您只有 id 的值列表。为了带来完整的 C 对象,您需要一个额外的:

criteria.createAlias("list", "listC");

这将为(即内部连接)创建一个A别名C。现在,假设你有一个(of class A) 你可以做a.getList().get(i).getWhateverFieldFromC();所以现在你已经为A它的 s 列表的每个实例C填充了。

不要忘记最后做一个criteria.list()来检索列表。这就是全部。

PS这是假设(当然)实体AC正确映射。

于 2013-01-10T13:03:29.440 回答