spring数据jpa:-不是托管类型错误
Spring Data JPA在运行测试时无法识别我的实体。请查找下面的代码。我们不使用弹簧靴 JPA配置文件(JPAConfigration\u Test.xml) 持久性spring数据jpa:-不是托管类型错误,spring,jpa,spring-data-jpa,spring-test,Spring,Jpa,Spring Data Jpa,Spring Test,Spring Data JPA在运行测试时无法识别我的实体。请查找下面的代码。我们不使用弹簧靴 JPA配置文件(JPAConfigration\u Test.xml) 持久性 <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSch
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="LA_Persistence">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.cache.use_second_level_cache" value="false"/>
<property name="hibernate.cache.use_query_cache" value="false"/>
</properties>
</persistence-unit>
</persistence>
无法加载应用程序上下文。我得到的错误是
at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86) ~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE]
... 26 common frames omitted
Caused by: java.lang.IllegalArgumentException: Not an managed type: class org.test.model.Demo
at org.hibernate.ejb.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:200) ~[hibernate-entitymanager-4.2.7.Final.jar:4.2.7.Final]
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:68) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:67) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:145) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:89) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:69) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:173) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633) ~[spri
位于org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86)~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE]
... 省略26个公共框架
原因:java.lang.IllegalArgumentException:不是托管类型:class org.test.model.Demo
在org.hibernate.ejb.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:200)~[hibernate-entitymanager-4.2.7.Final.jar:4.2.7.Final]
在org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.(JpaMetamodelEntityInformation.java:68)~[spring-data-jpa-1.7.3.RELEASE.jar:na]
在org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:67)~[spring-data-jpa-1.7.3.RELEASE.jar:na]
在org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:145)~[spring-data-jpa-1.7.3.RELEASE.jar:na]
在org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetPostory(JpaRepositoryFactory.java:89)~[spring-data-jpa-1.7.3.RELEASE.jar:na]
在org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetPostory(JpaRepositoryFactory.java:69)~[spring-data-jpa-1.7.3.RELEASE.jar:na]
在org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:173)~[spring-data-commons-1.9.3.RELEASE.jar:na]
在org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239)~[spring-data-commons-1.9.3.RELEASE.jar:na]
在org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertieSet(RepositoryFactoryBeanSupport.java:225)~[spring-data-commons-1.9.3.RELEASE.jar:na]
在org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.AfterPropertieSet(JpaRepositoryFactoryBean.java:92)~[spring-data-jpa-1.7.3.RELEASE.jar:na]
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)~[spri
我能够连接到数据库,并且表确实存在。为什么会发生这种情况
更新1
如果在
Persistence.xml
中将实体添加为
,这似乎是可行的。问题似乎在于LocalContainerEntityManagerFactoryBean
中的packagesToScan
只有在LocalContainerEntityManagerFactory
上未定义持久化单元时才使用实体扫描一个不包含任何持久类的持久化单元,这样Hibernate就不会知道任何类
您是完整的
持久性。xml
似乎是多余的,因为您只是复制了LCEMFB
上已有的配置。我建议将其删除,让Spring扫描实体。谢谢。这对我来说现在起作用了。但我们有一个工作的web应用程序,它实际上使用完全相同的配置运行n我在问题中提出了问题。错误只发生在测试中。你知道为什么这在Web应用程序中有效,而在测试中无效。我再次检查了这一点,可以确认存在与上述问题完全相同的配置的工作应用程序。这看起来很奇怪,但出于好奇,我想o了解他们如何以不同的方式处理测试和web应用程序。
@Entity
@Table(schema="TESTUSER1")
public class Demo {
@Id
private Integer id;
@Column
private String description;
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="LA_Persistence">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.cache.use_second_level_cache" value="false"/>
<property name="hibernate.cache.use_query_cache" value="false"/>
</properties>
</persistence-unit>
</persistence>
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring/JPAConfigration_Test.xml"})
public class LegalRequestRepositoryTest{
@BeforeClass
public static void initiateJNDI() throws IllegalStateException, NamingException{
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
BasicDataSource basicDataSourceLAdvice = new BasicDataSource();
basicDataSourceLAdvice.setDriverClassName("oracle.jdbc.OracleDriver");
basicDataSourceLAdvice.setUsername("TESTUSER1");
basicDataSourceLAdvice.setPassword("TESTUSER1");
basicDataSourceLAdvice.setUrl("jdbc:oracle:thin:@localhost:1521:XE");
builder.bind( "java:comp/env/jdbc/ladvice_service" , basicDataSourceLAdvice );
builder.activate();
}
@Test
public void testDEMO(){
}
}
at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86) ~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE]
... 26 common frames omitted
Caused by: java.lang.IllegalArgumentException: Not an managed type: class org.test.model.Demo
at org.hibernate.ejb.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:200) ~[hibernate-entitymanager-4.2.7.Final.jar:4.2.7.Final]
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:68) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:67) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:145) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:89) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:69) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:173) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225) ~[spring-data-commons-1.9.3.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92) ~[spring-data-jpa-1.7.3.RELEASE.jar:na]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633) ~[spri