如何配置Spring和persistence.xml来扫描实体

时间:2018-11-25 20:37:02

标签: java spring hibernate jpa

我在src / test / resources位置有一个test-persistence.xml文件。该文件的内容为:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
             xmlns="http://java.sun.com/xml/ns/persistence"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                                http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="mmTest" transaction-type="RESOURCE_LOCAL">
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value=""/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
        </properties>
    </persistence-unit>
</persistence>

我的Spring配置如下:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="packagesToScan" value="com.sample"/>
    <property name="persistenceUnitName" value="mmTest"/>
    <property name="persistenceUnitManager" ref="persistenceUnitManager"/>
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
</bean>
<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
    <property name="persistenceXmlLocation" value="classpath*:test-persistence.xml"/>
</bean>
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="showSql" value="true"/>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

当我尝试使用此上下文配置集运行JUnit测试时,出现异常:

  

java.lang.IllegalArgumentException:未知实体:   com.sample.SampleEntity

是否可以使用persistence.xml文件进行测试并将Spring配置为使用@Entity扫描类?我不想使用JPA特定的类发现,例如jar文件或列出的类。我想使用Spring来发现那些类。

奇怪的是,当我将test-persistence.xml移至以下位置:/ src / main / resources / META-INF时,一切正常。但是,我不想在src / main中进行测试特定的配置。

当前,我通过指定DataSource而不是persistenceUnitManager和persistenceUnitName解决了该问题。

但是我想知道如何在不使用DataSource的情况下解决它。

0 个答案:

没有答案