Java 在web应用程序中找不到持久性单元
堆栈跟踪:Java 在web应用程序中找不到持久性单元,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,堆栈跟踪: Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named Sample at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61) at javax.persistence.Persistence.createEntityMana
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named Sample
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at cm.cvs.service.UserInfoService.<init>(UserInfoService.java:32)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
... 24 more
原因:javax.persistence.PersistenceException:没有名为Sample的EntityManager的持久性提供程序
位于javax.persistence.persistence.createEntityManagerFactory(persistence.java:61)
位于javax.persistence.persistence.createEntityManagerFactory(persistence.java:39)
位于cm.cvs.service.UserInfoService。(UserInfoService.java:32)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于org.springframework.beans.BeanUtils.InstanceClass(BeanUtils.java:147)
... 还有24个
使用的罐子:
将persistence.xml放在META-INF文件夹下。
Persistence.xml
<provider>javax.persistence.spi.PersistenceProvider</provider>
在persistence.xml中,我已经给出了provider属性。在web应用程序项目下执行JPA时,将persistence.xml放在“src/META-INF”路径中,并从persistence.xml中删除下面的一行
<provider>javax.persistence.spi.PersistenceProvider</provider>
javax.persistence.spi.PersistenceProvider
注意:META-INF文件夹是在src文件夹下新创建的
已从此获取引用以解决错误
首先,我尝试创建一个简单的JavaJPA应用程序来检查我是否也得到了同样的结果
但效果很好。当我用web应用程序persistence.xml替换java application persistence.xml时,那一次它抛出了相同的错误
在比较了persistence.xml和persistence.xml之后,我从web应用程序的persistence.xml中删除了行“javax.persistence.spi.PersistenceProvider”,并将其保存在src/META-INF下,然后它就可以正常工作了。WTF是“provider”吗?您应该在那里指定JPA提供者的实现类,而不是接口。那么定义DataNucleus使用的实现?日食?冬眠?OpenJPA?并在他们的文档中查找提供者名称@ChristianW的可能副本,它不是副本。从“没有为EntityManager命名的持久性提供程序”的答案中,我已经使用了这个答案来解决它。但它仍然不起作用。因此,在您当前的persistence.xml中,您使用org.hibernate.ejb.HibernatePersistence作为实现,而不是javax.persistence.spi.PersistenceProvider?现在问题得到解决,我的persistence.xml中没有使用provider标记,这完全忽略了根本原因。。。为您选择的JPA提供者输入正确的“提供者”值。只有在类路径中只有一个提供程序时,才能放置“provider”元素。一旦您有多人在场,此“解决方案”就会失败