Hibernate 休眠从多个表获取数据
我有三张桌子。主人,孩子1,孩子2 主人与孩子有一对多的关系1 Master与child2有一对多关系 child1和child2之间没有关系 我想使用hibernate在一次查询中从所有3个表中检索数据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
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对您没有用处,那么为什么要将它们插入表中?