我知道使用spring boot,您不需要打开和关闭Hibernate会话。
而是为了理解它是如何在内部工作的,它在哪一层打开Hibernate会话,以及何时关闭Hibernate会话。
我创建了一个PoC。我有一个spring boot应用程序,它有两个实体,一个是customer
,另一个是address
,customer
和address
之间有一对多的关系。
我有一个两个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内部,因为它不是存储库,但我没有得到任何异常
我认为,如果您的customer.getAddress在事务内部,它仍然可以工作
首先,在表示层
中使用存储库层
不是一个好的实践。
在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。你知道我怎么才能做到吗?