各位好, 数据结构如下:
Class A{
B b;(ManyToOne)
}
Clss B{
C c;(ManyToOne)
}
我设置了hibernate.max_fetch_depth=1,意思是想取A时只取到B这一级,不取C
我的理解正确吗
各位好, 数据结构如下:
Class A{
B b;(ManyToOne)
}
Clss B{
C c;(ManyToOne)
}
我设置了hibernate.max_fetch_depth=1,意思是想取A时只取到B这一级,不取C
我的理解正确吗
[code="java"]hibernate.max_fetch_depth为单向关联(一对一, 多对一)的外连接抓取(outer join fetch)树设置最大深度. 值为0意味着将关闭默认的外连接抓取.
取值 建议在0到3之间取值 [/code]
这是hibernate文档的原话。
至于外连接的讨论
[code="java"]如果你的数据库支持ANSI, Oracle或Sybase风格的外连接, 外连接抓取通常能通过限制往返数据库次数 (更多的工作交由数据库自己来完成)来提高效率. 外连接抓取允许在单个SELECTSQL语句中, 通过many-to-one, one-to-many, many-to-many和one-to-one关联获取连接对象的整个对象图.
将hibernate.max_fetch_depth设为0能在全局 范围内禁止外连接抓取. 设为1或更高值能启用one-to-one和many-to-oneouter关联的外连接抓取, 它们通过 fetch="join"来映射[/code]
更加信息的内容参看hibernate文档的 抓取策略部分
回到你的问题,就是说那个参数是影响设置fetch="join"的元素的连接深度的。
至于fetch的参数和策略,可以参考这个帖子
http://www.iteye.com/topic/77475