我在尝试在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;
两个重要事实:
(如果您感觉更有帮助,需要更多设置细节,请随时在https://github.com/vitallan/politicaaberta-api询问或联系项目)
答案 0 :(得分:0)
我的错误,Google Guice注入了一个提供者,而不是实体管理员。
所以,改变注射
@Inject
private EntityManager em;
到
@Inject
private Provider<EntityManager> em;
解决了这个问题。