2014-08-27 143 views
3

我在彈簧的web應用程序使用彈簧數據的JPA工作最近春數據JPA JavaConfig

我與持久性配置問題:

@Configuration 
@EnableTransactionManagement 
@ComponentScan(basePackages = "com.servmed") 
@PropertySource({ "/resources/hibernate.properties" }) 
@EnableJpaRepositories(basePackages = "com.servmed.repositories") 

public class PersistenceConfig { 

    @Autowired 
    private Environment env; 


    Properties jpaProperties() { 
     return new Properties() { 
      { 
       setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); 
       setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); //allows Hibernate to generate SQL optimized for a particular relational database. 
       setProperty("hibernate.show_sql",env.getProperty("hibernate.show_sql")); 
      } 
     }; 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() 
    { 
     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(true); 
     vendorAdapter.setShowSql(true); 

     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setDataSource(dataSource()); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setJpaProperties(jpaProperties()); 
     factory.setPackagesToScan("com.servmed.models"); 

     //factory.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver()); 
     return factory; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager() 
    { 
     EntityManagerFactory factory = entityManagerFactory().getObject(); 
     return new JpaTransactionManager(factory); 
    } 

    @Bean 
    public HibernateExceptionTranslator hibernateExceptionTranslator(){ 
     return new HibernateExceptionTranslator(); 
    } 


    @Bean 
    public DataSource dataSource() { 
     BasicDataSource dataSource = new BasicDataSource(); 
     dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName")); 
     dataSource.setUrl(env.getProperty("jdbc.url")); 
     dataSource.setUsername(env.getProperty("jdbc.user")); 
     dataSource.setPassword(env.getProperty("jdbc.pass")); 

     return dataSource; 
    } 
} 

我得到這個錯誤,我似乎無法找到什麼是錯的:

Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [com/servmed/configuration/PersistenceConfig.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory]] 

PS:我注意到,我添加到庫中的休眠實體管理器是depecated,我應該用別的東西代替?

+0

可能的[Spring數據JPA配置]的副本(http://stackoverflow.com/questions/25528251/spring-data-jpa-configuration) – 2014-08-28 14:26:27

回答

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

    <context:property-placeholder location="classpath:datasource.properties" /> 

    <context:annotation-config/> 
    <context:component-scan base-package="com.wish.anthem.hippa" /> 

    <mvc:annotation-driven/> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/pages/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.wish.anthem.hippa.model" /> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
       <prop key="hibernate.show_sql">${jpa.showSql}</prop> 
       <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
      </props> 
     </property> 
    </bean>  

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${jdbc.driverClassName}"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    </bean>  

    <!-- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"></property> 
    </bean> --> 

    <bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <property name="dataSource" ref="dataSource"></property> 
    </bean> 

    <!-- <tx:annotation-driven /> --> 

    <!-- <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> --> 

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
     <property name="order" value="1" /> 
     <property name="ignoreAcceptHeader" value="true" /> 
     <property name="mediaTypes"> 
      <map> 
       <entry key="xml" value="application/xml"/> 
       <entry key="json" value="application/json"/> 
      </map> 
     </property> 
    </bean> 
</beans> 

jpa.database=MYSQL 
jpa.showSql=false 

hibernate.hbm2ddl.auto=update 
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://127.0.0.1:3306/anthem 
jdbc.username=root 
jdbc.password= 

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>anthem</display-name> 

    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
    <servlet-name>dispatcherservlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>dispatcherservlet</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/dispatcherservlet-servlet.xml</param-value> 
    </context-param> 

    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

</web-app><?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>anthem</display-name> 

    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
    <servlet-name>dispatcherservlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>dispatcherservlet</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/dispatcherservlet-servlet.xml</param-value> 
    </context-param> 

    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

</web-app> 

<jsp:forward page="anthemlogin.htm" /> 

@SuppressWarnings("unchecked") 
@Repository 
public class CatalogDaoImpl implements CatalogDao 
{ 
    @Autowired 
    private SessionFactory sessionFactory; 

    @Autowired 
    private JdbcTemplate jdbcTemplate; 

    @Override 
    @Transactional 
    public List<Catalog> getAllCatalogs() 
    { 
     Session session = sessionFactory.openSession();  
     Query query = session.createQuery("select c from Catalog c"); 
     List<Catalog> catalogs = query.list(); 
     session.close(); 
     return catalogs;    
    } 
} 

@Entity 
@Table(name = "h_product") 
public class Product implements Serializable 
{ 

    private static final long serialVersionUID = 353305417649482096L; 


    @Id 
    @GeneratedValue 
    @Column(name = "ProductID", nullable = false) 
    private Integer productID = 0; 

    @Column(name = "ProductItem", nullable = false, length = 50) 
    private String productItem = ""; 

    @Column(name = "ProductName", nullable = false, length = 50) 
    private String productName = ""; 

    @Column(name="Title", nullable=false, length=50) 
    private String title = ""; 

    @Column(name = "CreateTime", nullable = false, length = 19) 
    private Date createTime = Utils.getCurrentDateTimeDate(); 


    public Integer getProductID() { 
     return productID; 
    } 

    public void setProductID(Integer productID) { 
     this.productID = productID; 
    } 

    public String getProductItem() { 
     return productItem; 
    } 

    public void setProductItem(String productItem) { 
     this.productItem = productItem; 
    } 

    public String getProductName() { 
     return productName; 
    } 

    public void setProductName(String productName) { 
     this.productName = productName; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public Date getCreateTime() { 
     return createTime; 
    } 

    public void setCreateTime(Date createTime) { 
     this.createTime = createTime; 
    } 


    @Override 
    public int hashCode() 
    { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + ((productID == null) ? 0 : productID.hashCode()); 
     return result; 
    } 

    @Override 
    public boolean equals(Object obj) 
    { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     Product other = (Product) obj; 
     if (productID == null) 
     { 
      if (other.productID != null) 
       return false; 
     } 
     else if (!productID.equals(other.productID)) 
      return false; 
     return true; 
    } 
} 

@Component 

public class HippaServiceImpl implements HippaService 
{ 
    @Autowired 
    private HippaDao catalogDao; 
} 
-1
@Controller 
    public class HippaController 
    { 

     final static Logger logger = Logger.getLogger(HippaController.class); 

     @Autowired 
     private HippaService hippaService; 


     @RequestMapping(value="/anthemlogin", method = RequestMethod.GET) 
     public String showLoginPage(HttpServletRequest request,HttpSession session) 
     { 
      logger.info("Home Page!!!!!!!!"); 

      return "home"; 
     } 

    <?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:p="http://www.springframework.org/schema/p" 
     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation=" 
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 
       http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd 
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 

     <context:property-placeholder location="classpath:datasource.properties" /> 

     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
      destroy-method="close"> 
      <property name="driverClass" value="${jdbc.driverClassName}" /> 
      <property name="jdbcUrl" value="${jdbc.url}" /> 
      <property name="user" value="${jdbc.username}" /> 
      <property name="password" value="${jdbc.password}" /> 

      <property name="minPoolSize" value="${jdbc.miniPoolSize}" /> 
      <property name="maxPoolSize" value="${jdbc.maxPoolSize}" /> 
      <property name="initialPoolSize" value="${jdbc.initialPoolSize}" /> 
      <property name="maxIdleTime" value="${jdbc.maxIdleTime}" /> 
      <property name="acquireIncrement" value="${jdbc.acquireIncrement}" /> 
      <property name="acquireRetryAttempts" value="${jdbc.acquireRetryAttempts}" /> 
      <property name="acquireRetryDelay" value="${jdbc.acquireRetryDelay}" /> 
      <property name="testConnectionOnCheckin" value="${jdbc.testConnectionOnCheckin}" /> 
      <property name="preferredTestQuery" value="${jdbc.preferredTestQuery}" /> 
      <property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}" /> 
     </bean> 

     <!-- JPA EntityManagerFactory --> 
     <bean id="entityManagerFactory" 
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
      p:dataSource-ref="dataSource"> 
      <property name="jpaVendorAdapter"> 
       <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
        p:database="${jpa.database}" p:showSql="${jpa.showSql}" /> 
      </property> 
      <property name="jpaProperties"> 
       <props> 
        <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop> 
        <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop> 
        <prop key="hibernate.default_batch_fetch_size">${hibernate.default_batch_fetch_size}</prop> 
        <prop key="hibernate.search.default.directory_provider">${hibernate.search.default.directory_provider}</prop> 
        <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
        <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
       </props> 
      </property> 
     </bean> 

     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
      p:entityManagerFactory-ref="entityManagerFactory" /> 

     <aop:aspectj-autoproxy proxy-target-class="true" /> 
     <context:component-scan base-package="com.wish" /> 
     <tx:annotation-driven transaction-manager="transactionManager" /> 

     <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 
    </beans> 

    jdbc.miniPoolSize=1 
    jdbc.maxPoolSize=10 
    jdbc.initialPoolSize=1 
    jdbc.maxIdleTime=21600 
    jdbc.acquireIncrement=1 
    jdbc.acquireRetryAttempts=30 
    jdbc.acquireRetryDelay=1000 
    jdbc.testConnectionOnCheckin=true 
    jdbc.preferredTestQuery=select 1 
    jdbc.idleConnectionTestPeriod=3600 

    hibernate.search.default.directory_provider=com.wish.common.resource.hibernate.search.WishFSDirectoryProvider 
    jpa.database=MYSQL 
    jpa.showSql=false 

    hibernate.hbm2ddl.auto=update 

    hibernate.jdbc.fetch_size=50 
    hibernate.jdbc.batch_size=30 
    hibernate.default_batch_fetch_size=8 
    hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 

    jdbc.driverClassName=com.mysql.jdbc.Driver 
    jdbc.url=jdbc:mysql://127.0.0.1:3306/bbcrafts?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf8 
    jdbc.username=root 
    jdbc.password= 

    @Service 
    public class OrderDao implements IOrderDao 
    { 

     @PersistenceContext 
     private EntityManager em; 

     @SuppressWarnings("unchecked") 
     @Override 
     public List<Order> getOrdersForTracking(String orderCode, String realName) throws RuntimeException 
     { 
      StringBuffer sql = new StringBuffer("select o from Order o"); 
      sql.append(" where (o.orderCode = ?1) and (o.billingRealName like concat('%',?2,'%')"); 
      sql.append(" or o.shippingRealName like concat('%',?3,'%'))"); 
      sql.append(" order by o.dateTime desc"); 

      Query query = em.createQuery(sql.toString()); 
      query.setParameter(1, orderCode); 
      query.setParameter(2, realName); 
      query.setParameter(3, realName); 
      return query.getResultList(); 
     } 

    TO find: Order temp = em.find(Order.class, orderID); 
      return temp != null ? temp : new Order(); 

Libs: 
activation-1.1, antlr-2.7.6, antlr-runtime-3.0, aopappliance-1.0, apache-lucene, commons-collections-3.1, commons-io-2.0.1, commons-logging-1.0.4, dom4j, ejb3-persistence-1.0.2.GA, hibernate3, hibernate-annoatation-3.4.0.GA, hibernate-commons-annoatation-3.1.0.GA, hibernate-core-3.3.2.GA, hibernate-entitymanager-3.4.0.GA, hibernate-search-3.1.1.GA, hibernate-validator-3.1.0.GA, javax.transaction, jstl-1.2, log4j, log4j-1.2.13, logback, javaassist-3.4.GA, jackson-all-1.9.0, IKanalyzer-3.1.2.GA, mysql-connector-java-5.1.18-bin, org-apache-commons-logging, pinyin4j-2.5.0, slf4j-api-1.7.9, all spring jars 
0

不能完全確定是什麼問題,但我相信你的實體管理器的定義可能被破獲的地方。

我用這個定義非常接近你的。看一看。

@Bean 
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 

    LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean(); 
    emf.setDataSource(this.dataSource()); 
    emf.setPackagesToScan("com.servmed.models"); 
    emf.setPersistenceUnitName("MyPU"); 
    HibernateJpaVendorAdapter va = new HibernateJpaVendorAdapter(); 
    emf.setJpaVendorAdapter(va); 
    Properties jpaProperties = new Properties(); 
    jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"); 
    jpaProperties.put("hibernate.hbm2ddl.auto", "create"); 
    emf.setJpaProperties(jpaProperties); 
    emf.afterPropertiesSet(); 
    return emf; 
}