【发布时间】:2017-07-22 20:43:29
【问题描述】:
我将 JPA 与 Guice Persist 用于我的 GAE 项目,将 Restlet 用于 REST 接口。在幕后,老 Hibernate 提供 JPA 服务。
这就像一个魅力,Guice 将必要的 JPA 部分注入到我的类中,例如 RestletServlet 中的 EntityManager;
现在我想使用SessionInterceptor 将创建/编辑时间戳和当前活动用户插入到我的实体中。在旧项目中,我使用带有 ThreadLocal 变量的静态 HibernateUtil 类来存储会话。在我的新项目中,我想用 Guice 解决这个问题。 Guice 需要在我的SessionInterceptor 中注入一个EntityManager,这样我就可以从数据库中加载当前的活动用户。
SessionInterceptor 需要在 Hibernate 上下文中创建,并且不允许在启动后对其进行配置。因此,我创建了一个使用 Guice 注射器的SessionInterceptorFactory。在persistence.xml
这行得通(是的,它很丑),我有一个带有 Guice 注入的 SessionInterceptor。
但是当我尝试这段代码时;
[错误] 1) javax.persistence.EntityManager 没有实现 边界。 [错误] 定位时 com.google.inject.Provider [错误]
对于第一个参数 com.ludus.server.hibernate.SessionInterceptor.(SessionInterceptor.java:20) [错误] 定位 com.ludus.server.hibernate.SessionInterceptor 时
我需要将 JPA (Hibernate) 配置与 Guice 中的 SessionInterceptor 连接 (bound),就像我在 RestletServlet 中所做的那样,但是如何操作?
谁能帮我完成这个 Guice 配置?
除此之外,当前的SessionInterceptorFactory 是一个“肮脏的 Guice hack”,有没有一个干净的 Guice 解决方案?
【问题讨论】:
标签: hibernate jpa guice guice-servlet guice-persist