Java 除非在persistence.xml中手动指定,否则找不到休眠实体

Java 除非在persistence.xml中手动指定,否则找不到休眠实体,java,xml,spring,hibernate,spring-boot,Java,Xml,Spring,Hibernate,Spring Boot,我有两份申请 App - main app : depends on lib lib - secondary app. 我正在使用SpringBoot为应用程序生成可执行的jar文件,这样lib的jar就位于jar的lib文件夹my.jar中/lib/lib.jar 我使用的是hibernate,配置如下 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManag

我有两份申请

App - main app : depends on lib
lib - secondary app.
我正在使用SpringBoot为应用程序生成可执行的jar文件,这样lib的jar就位于jar的lib文件夹my.jar中/lib/lib.jar

我使用的是hibernate,配置如下

<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中添加:my.path.to.lib.data.card.FakeData,则异常不起作用。但是,我不希望必须手动指定所有实体,这就是为什么我的entityManagerFactory包含packagesToScan,但似乎没有对其进行扫描

我怎样才能使包装箱工作

编辑:

我发现,如果persistence.xml存在,那么packagesToScan将被忽略。在我的例子中,由于依赖于其他几个需要persistence.xml的共享项目,我无法删除所有persistence.xml。是否有办法指定包/通配符,而不是在persistence.xml中列出每个单独的包/通配符

是否有办法指定包/通配符,而不是在persistence.xml中列出每个单独的包/通配符


当然,这是指定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);
    }

}