NullPointer在SparkJava应用程序中使用Guice-persist注入EntityManager

时间:2015-12-07 02:23:04

标签: java hibernate guice entitymanager spark-java

我在尝试在Spark + Guice应用程序中注入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();
}

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

@Inject
private EntityManager em;

两个重要事实:

  1. 在App的运行方法中,我启动PersistService
  2. 也许我错了,但我不认为问题出在sqlite上。我这样说是因为没有尝试注入entityManager,应用程序启动就可以了,甚至可以创建数据库和表。
  3. (如果您感觉更有帮助,需要更多设置细节,请随时在https://github.com/vitallan/politicaaberta-api询问或联系项目)

1 个答案:

答案 0 :(得分:0)

我的错误,Google Guice注入了一个提供者,而不是实体管理员。

所以,改变注射

@Inject
private EntityManager em;

@Inject
private Provider<EntityManager> em;

解决了这个问题。