您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在控制台应用程序中将spring-data-jpa与hibernate一起使用时如何延迟加载

在控制台应用程序中将spring-data-jpa与hibernate一起使用时如何延迟加载

一种解决方案是通过以下方式制作User.orders一个 热切的 收藏

@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Order> orders = new HashSet<Order>();

认情况下,实体关联是延迟加载的。这意味着ordersSet实际上只是一个代理对象,除非您在其上调用方法,否则它不会被初始化。这很好,因为Order除非需要它们,否则不会加载关联的对象。但是,如果您尝试在运行的事务之外访问未初始化的集合,则可能会导致问题。

如果您知道在大多数情况下您将需要用户订单,那么使关联热切地获取是有意义的。否则,您将必须确保集合在事务内被初始化/加载。在OpenSessionInViewFilter你确定提到品牌,交易停留在请求处理过程中打开,这就是为什么你没有在YOUT的webapp这个问题。

如果必须让它延迟加载,请尝试使用Spring TransactionTemplate代码包装在您的main方法中:

TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
    @Override
    protected void doInTransactionWithoutResult(TransactionStatus status) {
    ...
    }
});
Java 2022/1/1 18:14:10 有541人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶