Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 休眠从多个表获取数据_Hibernate - Fatal编程技术网

Hibernate 休眠从多个表获取数据

Hibernate 休眠从多个表获取数据,hibernate,Hibernate,我有三张桌子。主人,孩子1,孩子2 主人与孩子有一对多的关系1 Master与child2有一对多关系 child1和child2之间没有关系 我想使用hibernate在一次查询中从所有3个表中检索数据 Table - Master id 11 12 Table - child1 id deposited_date Master_child1_reltion_key 2 2012-10-10 1

我有三张桌子。主人,孩子1,孩子2

主人与孩子有一对多的关系1

Master与child2有一对多关系

child1和child2之间没有关系

我想使用hibernate在一次查询中从所有3个表中检索数据

Table - Master
   id    
   11
   12

Table - child1
   id    deposited_date      Master_child1_reltion_key
   2     2012-10-10                   11
   3     2012-10-10                   11
   4     2012-10-10                   11
   5     2011-01-01                   12
   6     2005-02-20                   13


Table - child2   
   id    phoneNo      phone_type        master_child2_relation_key
   15    1111111      personal              11
   16    2222222      office                11 
   17    3333333      home                  11 
   18    1010100      personal              12  
在表child2中,主表中可以没有、1、2或3条记录

我想从所有3个表中检索值。像

  id     deposited_date    phoneno1     phoneno2     phoneno3
  11       2012-10-10      1111111      2222222       3333333
  12       2011-01-01      1010100
  13       2005-02-20 

可以在hibernate中使用单个查询检索数据,还是需要使用多个查询?

从主控主机中选择主控主机左连接获取主控主机。child1左连接获取主控主机。child2

这将把master作为根目录,并包含两个填充的child列表


关于
id=13
我不明白如何将
FK
设置为不存在
master

您可以使用条件从所有3个表中获取数据,如下所示:

Criteria crit = session.createCriteria(Master.class);
crit.setFetchMode("child1", FetchMode.JOIN);
crit.setFetchMode("child2", FetchMode.JOIN);
crit.setResultTransformer(criteria.DISTINCT_ROOT_ENTITY);
List<Master> masters = crit.list();
Criteria crit=session.createCriteria(Master.class);
crit.setFetchMode(“child1”,FetchMode.JOIN);
crit.setFetchMode(“child2”,FetchMode.JOIN);
crit.setResultTransformer(criteria.DISTINCT\u ROOT\u实体);
List masters=crit.List();

这里masters将是一个包含相关child1和child2实体的Master列表。

如果您可以为此编写sql,那么您也可以编写hql。通过这段代码,我得到了所有的结果。但是我怎样才能从表chid1中得到不同的结果呢(在我的例子中,child1包含3个Master_child1_relation_key 11的条目,它们的存放日期相同。因为日期相同,所以应该是1个条目)。在child2中可能存在重复数据。插入数据时需要小心。如果id为3和4的child1对您没有用处,那么为什么要将它们插入表中?