6

tôi đã tạo ra một dự án maven và thêm Spring4, Hibernate4 libs qua pom.xml Tôi đang cố gắng để liên kết ứng dụng web của tôi với cơ sở dữ liệu của tôi được tạo ra trong PostgreSQL , nhưng khi tôi xuất bản dự án của tôi trong tomcat apache 7 ngoại trừ sau đây xảy ra:java.lang.IllegalArgumentException: Không PersistenceProvider quy định trong cấu hình EntityManagerFactory

org.springframework.beans.factory.BeanCreationException: Lỗi tạo đậu với tên 'emf' quy định tại ServletContext nguồn [/WEB-INF/applicationContext.xml]: Yêu cầu phương thức init không thành công; ngoại lệ lồng nhau là java.lang.IllegalArgumentException: Không PersistenceProvider quy định trong cấu hình EntityManagerFactory, và chọn PersistenceUnitInfo không xác định một tên lớp nhà cung cấp hoặc ở org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java : 1553) tại org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:539) tại org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:475) tại org.springframework.be ans.factory.support.AbstractBeanFactory $ 1.getObject (AbstractBeanFactory.java:304) tại org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:228) tại org.springframework.beans.factory .support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:300) tại org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:195) tại org.springframework.context.support.AbstractApplicationContext.getBean (AbstractApplicationContext.java:973) tại org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:750) tại org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:482) tại org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext (ContextLoader.java:403) tại org.springframework.web .context.ContextLoader.initWebApplicationContext (ContextLoader.java:306) tại org.springframework.web.context.ContextLoaderListener.contextInitialized (ContextLoaderListener.java:106) tại org.apache.catalina.core.StandardContext.listenerStart (StandardContext .java: 4994) tại org.apache.catalina.core.StandardContext.startInternal (StandardContext.java:0492) tại org.apache.catalina.util.LifecycleBase.start (LifecycleBase.java:150) tại org.apache.catalina.core.ContainerBase $ StartChild.call (ContainerBase.java:1575) tại org.apache .catalina.core.ContainerBase $ StartChild.call (ContainerBase.java:1565) tại java.util.concurrent.FutureTask.run (Unknown Source) tại java.util.concurrent.ThreadPoolExecutor.runWorker (Unknown Source) tại java .util.concurrent.ThreadPoolExecutor $ Worker.run (Unknown Source) tại java.lang.Thread.run (Unknown Source) Gây ra bởi: java.lang.IllegalArgumentException: Không PersistenceProvider định trong cấu hình EntityManagerFactory, và chọn PersistenceUnitInfo không chỉ định một tên nhà cung cấp lớp hoặc ở org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory (LocalContainerEntityManagerFactoryBean.java:318) tại org.springframework.orm .jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet (AbstractEntityManagerFactoryBean.java:318) tại org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1612) tại org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory .initializeBean (AbstractAutowire CapableBeanFactory.java:1549) ... 21 hơn

đây là applicationContext.xml tôi:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> 


    <context:component-scan base-package="com.medsoft.stadto"> 
     <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
    </context:component-scan> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="org.postgresql.Driver" /> 
     <property name="url" value="jdbc:postgresql://localhost:1993/Posts" /> 
     <property name="username" value="postgres" /> 
     <property name="password" value="123" /> 
    </bean> 

    <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="emf"> 
     <property name="packagesToScan" value="com.medsoft.stadto.entity" /> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2dll.auto">create</prop> 
      </props> 
     </property> 
    </bean> 

    <tx:annotation-driven transaction-manager="txManager" /> 
    <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

</beans> 

Trả lời

11

Thay đổi cấu hình emf đậu và thêm một bean mới gọi là jpaVendorAdapter:

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="emf"> 
    <property name="packagesToScan" value="com.medsoft.stadto.entity" /> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/> 
    <property name="persistenceUnitName" value="stadto"/> 
    <property name="jpaProperties"> 
    <props> 
     <prop key="hibernate.show_sql">true</prop> 
     <prop key="hibernate.hbm2ddl.auto">create</prop> 
    </props> 
    </property> 
</bean> 

<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
    <property name="showSql" value="true"/> 
    <property name="generateDdl" value="true"/> 
    <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect"/> 
</bean> 

Đồng thời đảm bảo bạn có persistence.xml trong thư mục META-INF:

<?xml version="1.0"?> 
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
    http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
    version="2.1"> 
    <persistence-unit name="stadto"> 
    //No need to specify the provider as we already have specified JPA vendor in applicationContext.xml 
    </persistence-unit> 
</persistence> 
+0

Có cách nào để thực hiện mà không sử dụng perssistence.xml không? Bạn có thể giải thích những gì adapter nhà cung cấp của mình không? – Jess

Các vấn đề liên quan