java - 在 Spark Java 应用程序中使用 Guice-persist 注入(inject) EntityManager 的空指针

标签 java hibernate guice entitymanager spark-java

我在尝试在 Spark + Guice 应用程序中注入(inject) EntityManager 时遇到问题。

我的 persistence.xml 是:

<persistence-unit name="jpa-persistence-unit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <!-- JPA entities must be registered here -->
    <...>

    <properties>
        <property name="hibernate.dialect" value="A.Special.Customized.SQLiteDialect" />
        <property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC" />
        <property name="javax.persistence.jdbc.url" value="jdbc:sqlite:local.db" />
        <property name="javax.persistence.jdbc.user" value="" />
        <property name="javax.persistence.jdbc.password" value="" />
        <property name="hibernate.show_sql" value="true" />
        <property name="format_sql" value="true" />
        <property name="hibernate.connection.charSet" value="UTF-8" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
    </properties>
</persistence-unit>

我的主要方法(在​​ App.java 中)

public static void main(String[] args) {
    Injector injector = Guice.createInjector(new JpaPersistModule("jpa-persistence-unit"));
    injector.getInstance(App.class).run();
}

我正在尝试以这种方式注入(inject)由 guice 管理的对象(在 ViceService.java 中)

@Inject
private EntityManager em;

两个重要事实:

  1. 在应用程序的 run 方法中,我启动 PersistService
  2. 也许我错了,但我不认为问题出在 sqlite 上。我这样说是因为无需尝试注入(inject)实体管理器,应用程序就可以正常启动,甚至创建数据库和表。

(如果您感觉特别有帮助并且需要更多设置细节,请随时询问或通过 https://github.com/vitallan/politicaaberta-api 联系该项目)

最佳答案

我的错误,Google Guice 注入(inject)了一个提供者,具体来说不是实体管理器。

因此,改变注入(inject)方式

@Inject
private EntityManager em;

@Inject
private Provider<EntityManager> em;

解决了问题。

关于java - 在 Spark Java 应用程序中使用 Guice-persist 注入(inject) EntityManager 的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34125457/

相关文章:

java - 手动回滚 Spring MVC + Hibernate

database - Grails 自动约束更新

java - 在 Guice 中绑定(bind) Set<String>

java - 如何将 context.getNamedDispatcher 与 Guice Servlet 扩展一起使用

java - 如何使 LIbgdx 中的像素更加可见?

Java 计数 Realm 结果

java - 将 object[][] 转换为 ArrayList<Object[]>

java - Hibernate - @Transactional 不工作是否有任何特殊原因?

Grails 2.4 Guice 错误

dependency-injection - 当有两个不同的构造函数时如何使用 Guice 进行注入(inject)?