当前位置: 首页 > 知识库问答 >
问题:

spring boot如何处理Hibernate会话?

阳航
2023-03-14

我知道使用spring boot,您不需要打开和关闭Hibernate会话。

而是为了理解它是如何在内部工作的,它在哪一层打开Hibernate会话,以及何时关闭Hibernate会话。

我创建了一个PoC。我有一个spring boot应用程序,它有两个实体,一个是customer,另一个是addresscustomeraddress之间有一对多的关系。

我有一个两个API,一个是添加记录,另一个是获取所有记录。这些API存在于CustomerEndpoint中,并用

@RestController
@RequestMapping(value="/customer").

并创建了CustomerRepository,它扩展了CrudRepository,用于保存和获取Customer记录。

因此,根据我的理解,在使用CustomerRepository获取客户时,在CustomerEndpoint类中,当我们说Customer.GetAddress(因为它的fetchtype是惰性的)时,应该抛出LazyInitialization错误。但它没有抛出任何错误,它工作正常。

我认为CustomerEndpoint类中没有hibernate会话。

谁能帮我一下spring boot是如何维持这个Hibernate会话的?

因为每个人都认为它是另一个问题的重复,但我的问题不是他们解释的最重要的,因为根据他们的解释,session在存储库之前是有效的,所以根据我应该得到LazyInitialization异常,同时说Customer.GetAddress在CustomerEndpoint内部,因为它不是存储库,但我没有得到任何异常

共有2个答案

黎玺
2023-03-14

我认为,如果您的customer.getAddress在事务内部,它仍然可以工作

庾才
2023-03-14

首先,在表示层中使用存储库层不是一个好的实践。

在spring boot中默认启用了OSIV(视图中的开放会话),从性能和可伸缩性的角度来看,OSIV确实是个坏主意。

因此,您不会得到异常,并且能够在表示层中工作。通过在您的application.properties文件中放入这些内容来进行检查

spring.jpa.open-in-view=false

您可以参考OSIV反模式获得更多详细信息

 类似资料:
  • 我相信这是一个简单的问题,但我找不到答案或至少在搜索中使用正确的术语。 我正在一起设置和。默认情况下,将使用和等路径。 如果可能的话,我希望避免使用path作为哈希。正如Angular文档所述: 路由器的provideRouter函数将LocationStrategy设置为PathLocationStrategy,使其成为默认策略。如果我们愿意,我们可以在引导过程中切换到带有重写的HashLoca

  • 问题内容: 我正在尝试构建一个托管在Google AppEngine上的Go后端,Angular前端的应用程序,如果您没有会话或会话的登录状态为=1,则会强制您登录/ login。 我还尝试对几乎所有内容使用App Engine的app.yaml路由。 我不确定这可能吗? 目录结构: app.yaml应用程序:myapp版本:1运行时:go111#api_version:go1主程序:./serv

  • 问题内容: 我相信这是一个简单的问题,但我找不到答案,或者至少在搜索中使用正确的字词。 我正在设置并在一起。默认情况下,Angular将使用和之类的路径。 如果可能的话,我想避免使用path作为哈希值。如Angular 文档所述: 路由器的r函数将设置为,使其成为默认策略。如果愿意,我们可以在引导过程中使用覆盖切换到。 然后… 几乎所有Angular 2项目都应使用默认的HTML 5样式。它产生的

  • 问题内容: 我正在使用HttpClient 4.1.1来测试服务器的REST API。 我可以设法登录似乎正常,但是当我尝试执行其他任何操作时,我都失败了。 我很可能在下一个请求中设置cookie时遇到问题。 这是我目前的代码: 有没有更好的方法来管理HttpClient包中的会话/ cookie设置? 问题答案: 正确的方法是准备一个需要设置的,然后依次传递给每个呼叫。

  • 我正在使用ActiveMQ对电子邮件进行排队,消费者读取队列并发送电子邮件。 在启动时,我注册一个生产者,并永远缓存它。 有时,当连接关闭时,生产者无法将消息加入队列。 有人能告诉我处理闭门会议的最佳方式吗?我应该重新注册我的制作人吗?还是有办法重开会话?

  • ValidationExceptionHandler.java 当我运行我的代码并传递无效的电子邮件地址时,我会得到以下异常。从不执行HandleConstraintVilvation中的代码。异常中返回的http状态是500,但我想返回400。你知道我怎么才能做到吗?