在 Spark Java 应用程序中使用 Guice-persist 注入 EntityManager 的空指针
NullPointer injecting EntityManager with Guice-persist in SparkJava application
我在尝试在 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 管理的对象中(在 DeputyService.java 中)
@Inject
private EntityManager em;
两个重要事实:
- 在App的运行方法中我启动了PersistService
- 也许我错了,但我不认为问题出在sqlite上。我这样说是因为无需尝试注入 entityManager,应用程序就可以正常启动,甚至可以创建数据库和表。
(如果您感觉特别有帮助并且需要更多设置细节,请随时通过 https://github.com/vitallan/politicaaberta-api 询问或联系该项目)
我的错误,Google Guice 注入了一个提供者,具体来说不是 entityManager。
因此,将注入方式从
@Inject
private EntityManager em;
到
@Inject
private Provider<EntityManager> em;
解决了问题。
我在尝试在 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 管理的对象中(在 DeputyService.java 中)
@Inject
private EntityManager em;
两个重要事实:
- 在App的运行方法中我启动了PersistService
- 也许我错了,但我不认为问题出在sqlite上。我这样说是因为无需尝试注入 entityManager,应用程序就可以正常启动,甚至可以创建数据库和表。
(如果您感觉特别有帮助并且需要更多设置细节,请随时通过 https://github.com/vitallan/politicaaberta-api 询问或联系该项目)
我的错误,Google Guice 注入了一个提供者,具体来说不是 entityManager。
因此,将注入方式从
@Inject
private EntityManager em;
到
@Inject
private Provider<EntityManager> em;
解决了问题。