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

EntityManager不会被Guice注射

司空高义
2023-03-14

我更新了createInjector调用以包含我的JPAPersisteModule。。。

Guice。createInjector(新的ApplicationModule(),新的JpaPersistModule(“simpleRestApplication”)

在我的服务中,我的刀被注入没有问题。。。

@Path("/users")
public class UserService {

    @Inject
    private UserDAO dao;

    public UserService() {
        Application.getInjector().injectMembers(this);
    }


}

在我的UserDAOImpl上,提供者不会被注射。。。

@Inject
private Provider<EntityManager> em;

这会打印到控制台上:

自定义提供程序java中出现错误。查找com时lang.NullPointerException。谷歌。注射坚持jpa。在定位javax时使用了jpa服务。坚持不懈EntityManager

在我的持久性上。xml持久化单元声明如下:

<persistence-unit name="simpleRestApplication">

    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

    <properties>
        <!-- Configuração do driver -->
        <property name="hibernate.dialect"
            value="org.hibernate.dialect.Oracle10gDialect" />
        <property name="hibernate.connection.driver_class"
            value="oracle.jdbc.driver.OracleDriver" />

        <!-- Configuração de conexão -->
        <property name="hibernate.connection.url"
            value="jdbc:oracle:thin:@localhost:1521/XE" />
        <property name="hibernate.connection.username"
            value="system" />
        <property name="hibernate.connection.password"
            value="myPassword123" />
        <property name="hibernate.connection.autocommit"
            value="true" />

        <!-- Configuração do hibernate -->
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.connection.release_mode"
            value="auto" />
        <property name="current_session_context_class"
            value="thread" />
        <property name="hibernate.connection.autoReconnect"
            value="true" />

    </properties>

</persistence-unit>

共有1个答案

董翰墨
2023-03-14

基于此链接,我更改了ApplicationModule上的configure()方法,以安装JpaPersistenceModule并启动PersistService。。。

@Singleton
private static class JPAInitializer {
    @Inject
    public JPAInitializer(final PersistService service) {
        service.start();
    }
}

@Override
protected void configure() {

    install(new JpaPersistModule("simpleRestApplication"));
    bind(JPAInitializer.class).asEagerSingleton();

    // another bindings...

}

现在EntityManager被注入,没有任何错误...

public class UserDAOImpl implements UserDAO {

    @Inject
    private EntityManager em;

}
 类似资料:
  • 我正在尝试使用Guice 3.0,它不会实例化工厂。 SSCCE代码: < code>BarImpl与< code>FooImpl非常相似。这里出了什么问题?还要注意,我在这里尝试了< code>@AssistedInject和< code>@Inject,两者都会导致错误。 输出: 请注意,第 9 行是对 的第一次调用的行

  • 我正在使用JavaSE7开发一个桌面应用程序。应用程序使用多个线程,在创建的每个线程中,都会注入一个DAO类来访问我的数据库。作为持久层,我使用EclipseLink和JPA。EntityManager是使用构造函数注入注入注入到我的DAO类中的,因为它不是线程安全的,所以我使用了如下验证程序: 然而,相同的EntityManager实例被注入到每个DAO中。为了进行设置,我使用了由guice提供

  • 问题内容: 分析了整个互联网,但无法弄清楚为什么会发生这种情况。我有一个最简单的项目(使用jersey-quickstart- grizzly2原型),并且只有一个Jersey资源。我将Guice用作DI,因为CDI也不想与Jersey合作。问题在于,Guice在注入Jersey的资源时无法解析要使用的类。它在外面很好用,但不适用于泽西岛。这是泽西岛的资源: 传输接口: 它的实现: 遵循Googl

  • 我已经验证了@transaction方法是否正确放置,并且在调试堆栈中,我看到事务拦截器和实体管理器是根据对后端的请求创建的(因此没有guice持久性过滤器) 我的感觉表明问题在于会话上下文。我感觉(但我不能真正理解)它在多个请求上重用了我的持久性上下文。 我已经把一些框架放在一起,使这一切都能工作。我使用resteasy作为jax的实现者。guice(4.0beta4)作为cdi实现者,hibe

  • 我尝试了,,和组合,但没有任何效果@注入失败maven quarkus插件构建: [错误]原因:javax。企业注射UnsatisfiedSolutionException:javax类型的未满足依赖关系。坚持不懈EntityManager和限定符[@Default] 我尝试了使用和不使用persistence.xml.我的数据源和application.properties工作正常,因为我可以注

  • 问题内容: 我已经在我的应用程序中以相同的方式使用了本教程:http : //www.benmccann.com/hibernate-with-jpa-annotations- and-guice/ 我的应用程序是JAX-RS Web服务,它将接收许多并发请求并进行数据库更新。 GenericDAOImpl.java实现: } 如果2个并发线程尝试保存实体,我得到 如果我评论交易,保存效果很好。