Hibernate documenation给出了一些Hibernate的配置属性.其中,
hibernate.max_fetch_depth
Sets a maximum “depth” for the outer join fetch tree for single-ended
associations (one-to-one,many-to-one). A 0 disables default outer
join fetching. e.g. recommended values between 0 and 3hibernate.default_batch_fetch_size
Sets a default size for Hibernate batch fetching of associations. e.g.
recommended values 4,8,16
我是Hibernate的新人,有人可以帮助我理解这一点.
提前致谢.
解决方法
max_fetch_depth:
想象一个人和地址实体.每个人都住在一个地址(非常简单的系统),但是很多人可能住在同一个地址.在对象模型中,Person可能有一个address属性.这将被映射为多对一(如文档所述).
现在从数据库中获取一个Person时,hibernate会遇到这个属性.在数据库中,它是一个具有外键的地址表的列.要获取关联对象,可以使用此表的连接.生成的数据将用于填充将在该人员的地址属性上设置的Address对象.在这个意义上,Hibernate在获取对象时遍历对象图.
现在如果地址有一个财产城市?这也将是一对一的,并且将导致相同逻辑的加入.如果城市有财产国家?一样.
做很多连接对于表演来说是不好的.在某种程度上,最好做一个单独的选择,从缓存获取数据或注入代理.此配置属性确定在获取数据时,hibernate将通过连接遍历多少个关联.
想象一个人和地址实体.每个人都住在一个地址(非常简单的系统),但是很多人可能住在同一个地址.在对象模型中,Person可能有一个address属性.这将被映射为多对一(如文档所述).
现在从数据库中获取一个Person时,hibernate会遇到这个属性.在数据库中,它是一个具有外键的地址表的列.要获取关联对象,可以使用此表的连接.生成的数据将用于填充将在该人员的地址属性上设置的Address对象.在这个意义上,Hibernate在获取对象时遍历对象图.
现在如果地址有一个财产城市?这也将是一对一的,并且将导致相同逻辑的加入.如果城市有财产国家?一样.
做很多连接对于表演来说是不好的.在某种程度上,最好做一个单独的选择,从缓存获取数据或注入代理.此配置属性确定在获取数据时,hibernate将通过连接遍历多少个关联.
default_batch_fetch_size:这是一个非常低级别的属性,用于确定在查询集合关联时,Hibernate将请求JDBC驱动程序获取/加载多少行.如果您要查询一个国家/地区的所有城市(上一个例子),那么通过JDBC连接分批加载数据,将数据跨越内存作为对象进行更精简的过程.与环相比,查询将执行我们的应用程序来处理数据,然而,它通常是微不足道的.将配置属性保留为默认值通常是正确的.