hibernate 关联查询问题

jerry2012 发布于 2014/06/20 17:58
阅读 226
收藏 2

请说说是这么解决这个问题的:User表,Order表,他们是一对多关系,通过hibernate设置关联关系(OneToMany),问题1,我希望每次调用user.getOrder()的时候才开始查询,如果不调用此方法就不查询order表。问题2,当order表中数据量很大的情况下,比如一个User对应100万条Order数据,调用user.getOrder()的时候能实现分页查询。各位大侠,有什么好方法啊!!!

加载中
0
谢小蛋
谢小蛋
1.我记得有一个属性设置是否延迟加载2.最好不要用user.getOrder取用户order,直接sql关联分页查询
谢小蛋
谢小蛋
@jerry2012 第二个不是要查询所属某个用户下的order列表么,特殊情况得特殊处理。如果还用user取所有order的话那就只能在内存中对集合进行分页,这样数据得处理,也耗内存
jerry2012
jerry2012
如直接用sql语句,那就没有体现hibernate的优势了,如果有一个系统中有多个这种关系,就要写重复代码了。
0
lock_free
lock_free
不知道是我hibernate没学到家,我一直觉得hibernate没什么意义,还是jdbc实在。这种问题最烦了,明明一条sql搞定的事情,非要搞复杂化。sql调优也不好做。
jerry2012
jerry2012
你把你写的jdbc代码改成用hibernate来写,你就会发现好处了。
0
小小猫儿
小小猫儿
1.延时加载

2.session.createFilter(user.getOrder(),"order by xx").setFirstResult(10).setMaxResult(50).list();

多方的List做分页,Hibernate有专门的函数对LIST进行分页的

jerry2012
jerry2012
你的意思是先设置为fetch=FetchType.LAZY吗
0
小99
小99
我建议你使用springjdbc查询,hibernate增删改
jerry2012
jerry2012
大侠,能说详细点吗
0
gaia_next
gaia_next

1.配置one-To-Many的lazy属性为true  延迟加载

2.session.createFilter(user.getOrder(),"order by xx").setFirstResult(10).setMaxResult(50).list();

gaia_next
gaia_next
@jerry2012 应该差不多的 具体的你查一下相关文档和例子吧
jerry2012
jerry2012
我用JPA实现由方法吗,类似吗???
0
pantrick
pantrick

这种设计其实最坑爹了,你这样会麻烦的,最好不要用one tomany这种,order 可以设计冗余的user字段 搞成many toone 这样查询起来很方便!

pantrick
pantrick
回复 @jerry2012 : ? hibernate默认使用中间表,你认为中间表里就不会有100w个相同的user了?,外键从存储和查询都效率高的多了
jerry2012
jerry2012
如果你这样的设计的话,如果有100W条order数据,那不是有100W条相同的USER???你觉得这样合适吗???
0
triankg
triankg
user.getOrder 自动分页 HIBERNATE 没有 如果有 你找到可以告诉我  

分页需要自己写  HIBERNATE 没那么智能

0
蛋看江湖
蛋看江湖
hibernate 做单表查询  多表利用hql手写语句  另  数据库中最好不要关联外键  
jerry2012
jerry2012
数据库中不要设置外键管理合适吗???我觉得控制在一定数量就好了。尽量不要多于3张表管理查询就可以了。
jerry2012
jerry2012
我也觉得写HQL可能更好解决这个问题,可是项目经理要复用性,如果有很多OneTwoMany这种关系呢,就必须得写好多HQL,这种感觉又回到了JDBC了,虽然hibernate就是JDBC的封装,实在不想这样写啊。
0
小99
小99
我QQ,六五二三零八六七九,我给你发个项目,一看就明白了
返回顶部
顶部