java - 从petclinic jpa中的EntityManager获取 session 对象

标签 java spring hibernate spring-mvc jpa

与此问题相关的所有代码都在下面的超链接中。

我想访问 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 中使用什么语法?我还需要在应用程序的其他地方进行哪些其他更改才能获得 entityManagersessions对整个应用程序进行集中管理?

最佳答案

在示例项目中如此组织代码的原因是因为所有持久性代码都更适合在 petclinic.model 包中,该包包含项目的 DAO(数据访问对象)以及xxxRepository 命名约定。 Controller 的工作只是将 HTTP 请求路由到业务逻辑,并且应该保持精简(逻辑方面)。对于您的示例,您可能最好创建一个新的 DAO 和服务类,可能称为 FileServiceFileRepository 及其相应的实现(您可以使用示例中的现有类)举些例子)。创建这些类后,您可以将 FileService 包含在任何需要它的 Controller 中。对于 PetController ,您的逻辑流程将类似于 PetController -> FileService -> FileRepository.saveFile()。如果您想集中实体管理器,我只建议为其他 DAO 派生的通用 DAO 类执行此操作,并且不将实体管理器包含在 Controller 中。

关于java - 从petclinic jpa中的EntityManager获取 session 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20532245/

相关文章:

java - SWT 从浏览器获取默认字体

java - 为什么在 DEBUG 模式下启动应用程序服务器成本昂贵

Spring SimpleMappingExceptionResolver 不会进入默认 View

java - 如何使用 Hibernate 将文件作为 byte[] 存储到数据库中?

hibernate - spring data jpa一对一可选共享主键

java - PersistenceUnitInfo [appName] 有事务类型 JTA,但没有定义 jtaDataSource

java - 在一定范围内找到 gcd 并更新

JAVA 如何在运行时调整 JFrame 的大小?

java - Hibernate-使用 spring HibernateTemplate 进行一对多的级联选项

spring - JPA 和 Hibernate Cascade DELETE OneToMany 不起作用