Rom*_*Kap 2 java spring hibernate jpa lazy-initialization
我正面临着有趣的 LazyInitializationException 解决方案。为了防止这种情况(在 OneToMany 或 ManyToMany 上),一种已知的解决方案是使用 JOIN FETCH Query。你可以看到她的几个例子之一:https ://thoughts-on-java.org/best-practices-for-many-to-many-associations-with-hibernate-and-jpa/
其他更简单的解决方案是使用 Spring 中的 @Transactional。例如像这样:
@DeleteMapping(value ="/product/{tagId}")
@ResponseBody
@Transactional
public String deleteProductWithoutRelation(@PathVariable String product, Model model) {
Optional<Product> pr = productService.selectProduct(product);
if (pr.isPresent()) {
tag.get().getCustomer().size(); //usualy throws LazyInitializationException,
//without JOIN-FETCH Statment or @Transactional
return deletedTagId;
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以在存储库服务中放置一些方法的@Transactional,以封装此解决方案。那么这两种解决方案的优点或缺点是什么?
这里有几件事我们需要解开。
建议:您应该尝试使用适当的 JPQL/Criteria/SQL 语句获取呈现视图所需的所有数据,而不要过多依赖重新选择惰性字段。
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |