与此问题相关的所有代码都在下面的超链接中。
我想访问 PetController.java 中的 session 对象文件来自spring petclinic sample application 。我已将我的应用程序配置为使用 jpa。
这是我想要添加到 PetController.java
中的方法之一的内容:
Session session = entityManager.unwrap(Session.class);
Blob blob = Hibernate.getLobCreator(session).createBlob(file.getInputStream(), file.getSize());
我的问题是如何设置entityManager
以便它集中组织并连接到应用程序中需要连接的所有内容?
我找到了this example of EntityManager in petclinic's JpaVetRepositoryImpl.java 。它使用语法:
@PersistenceContext
private EntityManager em;
但是EntityManager
似乎不是从 VetController.java 调用的。
我需要调用session
对象,因此可能是 entitymanager
,来自 PetController.java。 (对于那些感兴趣的人来说,这是用户通过网络表单传入的文件,但我不想让它变得太复杂而混淆这篇文章。我只想一个简单的答案,如何获得 session
对象在 PetController.java
中使用 jpa。)我在 PetController.java
中使用什么语法?我还需要在应用程序的其他地方进行哪些其他更改才能获得 entityManager
和sessions
对整个应用程序进行集中管理?
最佳答案
在示例项目中如此组织代码的原因是因为所有持久性代码都更适合在 petclinic.model
包中,该包包含项目的 DAO(数据访问对象)以及xxxRepository
命名约定。 Controller 的工作只是将 HTTP 请求路由到业务逻辑,并且应该保持精简(逻辑方面)。对于您的示例,您可能最好创建一个新的 DAO 和服务类,可能称为 FileService
和 FileRepository
及其相应的实现(您可以使用示例中的现有类)举些例子)。创建这些类后,您可以将 FileService
包含在任何需要它的 Controller 中。对于 PetController
,您的逻辑流程将类似于 PetController -> FileService -> FileRepository.saveFile()
。如果您想集中实体管理器,我只建议为其他 DAO 派生的通用 DAO 类执行此操作,并且不将实体管理器包含在 Controller 中。
关于java - 从petclinic jpa中的EntityManager获取 session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20532245/