[英]Hibernate entities not being found unless manually specified in persistence.xml
我有兩個申請,
App - main app : depends on lib
lib - secondary app.
使用春季啟動,我正在為應用程序生成可執行的jar文件,這樣lib的jar就在jar的lib文件夾中(my.jar!/lib/lib.jar)
我正在使用以下配置的休眠模式
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
depends-on="fakeJpaProperties,fakeDataSource">
<property name="persistenceUnitName" value="fake" />
<property name="persistenceUnitManager">
<bean class="my.persistence.MergingPersistenceUnitManager">
<property name="persistenceXmlLocations">
<list>
<value>classpath*:META-INF/fake/persistence.xml</value>
</list>
</property>
</bean>
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
</bean>
</property>
<property name="packagesToScan" value="my.path.to.lib.data.card" />
</bean>
並且以下persistence.xml在lib中
<persistence-unit name="fake" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>fake</non-jta-data-source>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
</persistence-unit>
通過應用程序中的persistence.xml
<persistence-unit name="fake" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>fake</non-jta-data-source>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<jar-file>lib/lib.jar</jar-file>
</persistence-unit>
但是我得到了:
org.hibernate.MappingException: Unknown entity: my.path.to.lib.data.card.FakeData
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1096)
at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2565)
at org.hibernate.internal.SessionImpl.access$1900(SessionImpl.java:176)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2504)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2508)
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2495)
at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1043)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:1023)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1104)
... 91 common frames omitted
如果我在lib的persistence.xml中添加<class>my.path.to.lib.data.card.FakeData</class>
,則該異常不起作用。 但是,我不想手動指定所有實體,這就是為什么我的entityManagerFactory包含"packagesToScan"
,但是似乎並未對此進行掃描。
我如何使軟件包toScan工作?
編輯:
我在這里發現,如果persistence.xml
,則packagesToScan
被忽略。 就我而言,由於依賴於需要它的其他幾個共享項目,我無法刪除所有的persistence.xml
。 有沒有一種方法可以指定包/通配符,而不是在persistence.xml中列出每個單獨的<class>
?
有沒有一種方法可以指定包/通配符,而不是在persistence.xml中列出每個人?
AFAIK是指定JPA的方式,因此,如果要使用persistence.xml,那就必須使用它。
嘗試將@EntityScan批注添加到Spring Boot配置類:
@Configuration
@EntityScan(basePackages="my.path.to.lib.data.card")
public class application {
public static void main(String[] args) {
SpringApplication.run(application.class, args);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.