Join and Fetch and reducing data returned
所以我有一个查询,该查询与其他表进行多次联接。返回时出现904错误,因为它返回了太多的数据列。我也正在使用" Join fetch"。
我读到使用" Join"而不使用" Fetch"会返回主表,而不是所有内容。我的问题是
谢谢!
没有代码示例很难说如何精简,但是我可以解释这个问题的理论。
每个数据库对单个查询返回的列都有一定的限制。我已经在使用SQL Server和Hibernate的旧版应用程序中解决了此问题。升级SLQ Server版本后,开始出现此问题。
有一些方法可以解决此问题。也许旧版应用程序在实体上映射了许多EAGER负载,例如:
1 2 | @ManyToOne private Person person; |
(默认情况下,每个
并且此关系还有其他
解决方案是使用惰性提取来识别一些"分支"关系,该关系返回许多
1 2 | @ManyToOne(fetch = FetchType.LAZY) private Person person; |
在此更改之后,您需要确定这将如何影响您的应用程序,因为人员信息(以及该人员携带的其他可能的EAGER实体)已经不再可用。这通常是由于惰性异常导致的,您可以处理在事务内部获取信息或使用
进行查询的情况。
1 | select order FROM Order order JOIN FETCH order.person |
如果您在同一查询上滥用JPQL和
在解释之后,我将回答您的问题:
will i be able to access subsequent table data since it is not returned with Join vs Join Fetch?
是的。在事务内部,您可以延迟加载信息,例如:
1 | Person person = order.getPerson(); |
is there a way to reduce the columns i need (say i only need 5 out of 100) while the data still map to hibernate object (i read it becomes a list?)
是的。删除EAGER,不要在JPQL查询上使用