关于一对多映射时父表数据重复查询出来的问题?

terrence_tian 发布于 2013/08/05 19:33
阅读 2K+
收藏 0

今天遇到一个问题,父子表关系映射配置好后,查询了一下父表可以正常得到数据(包含子表的数据)。当我往子表内添加多条数据后,再从父表查询数据,这时问题就出来了。居然重复查询出多条父表的数据,重复的次数和子表里数据的数量一样。比如父表一条,子表关联父表三条,那就得到了父表相同的三条数据。我用hibernate,控制台生成的sql如下:

select
        goodsmodel0_.uuid as uuid1_2_,
        goodsmodel0_.model as model2_2_,
        goodsmodel0_.name as name3_2_,
        goodsmodel0_.time as time4_2_ 
    from
        tbl_goods goodsmodel0_ 
    left outer join
        tbl_goodsReptile reptileset1_ 
            on goodsmodel0_.uuid=reptileset1_.goodsUuid 
    where
        1=1 
    order by
        goodsmodel0_.uuid asc limit ?

以下是问题补充:

@terrence_tian:@Cascade(CascadeType.ALL) @OneToMany(fetch=FetchType.EAGER,mappedBy="goodsModel") //@JoinColumn(name = "goodsUuid") private Set<ReptileModel> reptileSet = new HashSet<ReptileModel>(); (2013/08/07 16:11)
加载中
0
terrence_tian
terrence_tian

引用来自“罪恶的花生”的答案

你的配置关系不是onetomany的关系
@Cascade(CascadeType.ALL)
@OneToMany(fetch=FetchType.EAGER,mappedBy="goodsModel")
//@JoinColumn(name = "goodsUuid")
private Set<ReptileModel> reptileSet = new HashSet<ReptileModel>();
terrence_tian
terrence_tian
回复 @罪恶的花生 : 把fetch属性去掉就变成懒加载了,这样就会报No-Session的错误。
罪恶的花生
罪恶的花生
回复 @小兴 : 你把feach属性去掉
terrence_tian
terrence_tian
回复 @罪恶的花生 : 那在页面上多难看啊,大神有没有好方法解决!
罪恶的花生
罪恶的花生
我晕,一对多出来多条一样的很正常。除非你不feach子表。
0
狮子暴走
狮子暴走
这样不应该是正确的么   我觉得取出对应的父表信息是对的呀
0
terrence_tian
terrence_tian

引用来自“雯雯小狮子”的答案

这样不应该是正确的么   我觉得取出对应的父表信息是对的呀
我把生成的sql去管理工具里面运行了一下,结果得到的也是三条重复的数据。父表里其实只有一条数据。
0
王瑞平
王瑞平
left outer join
0
工作流流流流流
工作流流流流流

晕  还是 我家 平平说的对 嘻嘻。。

左连接改为右连接或者把表换一下位置

以父表为准去查询就不会出现这样的问题了。。

0
terrence_tian
terrence_tian

引用来自“郑涵以”的答案

晕  还是 我家 平平说的对 嘻嘻。。

左连接改为右连接或者把表换一下位置

以父表为准去查询就不会出现这样的问题了。。

从生成的sql上就可以看出,是以父表去查询的。我尝试把左改为右还是不行。
0
terrence_tian
terrence_tian

引用来自“王瑞平”的答案

left outer join
我的sql就是左结合
0
罪恶的花生
罪恶的花生
你的配置关系不是onetomany的关系
0
方棱
方棱

小孩A说,我有1个爸爸。

小孩B说,我有1个爸爸。

小孩C说,我有1个爸爸。

他们说的都没错。

但是,你如果得出“有3个爸爸”的结论,就是你的问题了。

0
terrence_tian
terrence_tian

引用来自“方棱”的答案

小孩A说,我有1个爸爸。

小孩B说,我有1个爸爸。

小孩C说,我有1个爸爸。

他们说的都没错。

但是,你如果得出“有3个爸爸”的结论,就是你的问题了。

不就是没有发现问题,才求助的嘛!数据可以查询出来,也没有报错,只是父表数据多了三条重复的。
返回顶部
顶部