2017-03-09 39 views
0

所以我有一个查询与其他表进行多个连接。返回时出现904错误,因为它返回的数据列太多。我也使用“Join fetch”。加入并获取并减少返回的数据

我读到使用“Join”而没有“Fetch”将返回主表而不是所有东西。我的问题是,1.我将能够访问后续表数据,因为它不会与Join和Join Fetch一起返回?和2.是否有一种方法来减少我需要的列(比如我只需要100个中的5个),而数据仍然映射到hibernate对象(我读它成为一个列表?)。谢谢!

回答

1
  1. 是,通过延迟加载它们
  2. 是的,但你会得到一个List<Object[]>,其中每个数组包含选定的5个属性。在这种情况下返回的实体是没有意义的:返回对象的所有不变式都会被违反,因为几乎所有的字段都是空的。
+0

因此,给定我的场景,我不想让每个列返回导致904和想要保持我的Hibernate映射(“不需要的列”上的“默认/ null”值是确定的),什么是最好的方法?我还读到,我可以在映射文件中的属性上设置延迟加载属性:https://docs.jboss.org/hibernate/orm/3.5/reference/en-US/html/performance.html#performance-fetching - 在20.1.8初始化 - 是另一条路线?我正在查询100列以上的表格,并且不需要它。谢谢 – shaselai

+0

也从链接中提到了投影......但是这只是在java中完成,而不是如果我引入HQL权限? – shaselai

+0

最好的方法是放弃你的回收实体内部有空值的想法。 –