2015-04-09 7 views
1

Я только начал изучать весну. На самом деле я пытаюсь настроить спящий режим. Мне это очень тяжело, я нашел много вещей, которые я пока не понимаю, извините, если я задам глупые вопросы.Spring4 Конфигурация спящего режима

Я скопировал DataAccessConfig основанный на этот вопрос, Configuration HikariCP + Spring4 + Hibernate 2 , но я получил сообщение об ошибке, вот мой пример:

@Configuration 
@EnableTransactionManagement 
@PropertySource(value = { "classpath:application.properties" }) 
public class DataAccessConfig { 
    private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect"; 
    private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql"; 
    private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql"; 
    private static final String PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO = "hibernate.hbm2ddl.auto"; 
    //private static final String PROPERTY_NAME_H_CONNECTION_PROVIDER = "hibernate.connection.provider_class"; 

    @Autowired 
    private Environment env; 

    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName(env.getRequiredProperty("jdbc.driverClassName")); 
     dataSource.setUrl(env.getRequiredProperty("jdbc.url")); 
     dataSource.setUsername(env.getRequiredProperty("jdbc.username")); 
     dataSource.setPassword(env.getRequiredProperty("jdbc.password")); 
     return dataSource; 
    } 

    @Bean 
    @Autowired 
    public PlatformTransactionManager transactionManager() throws ClassNotFoundException { 
     return new JpaTransactionManager(entityManagerFactory().getObject()); 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws ClassNotFoundException { 
     LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); 

     entityManagerFactoryBean.setDataSource(dataSource()); 
     entityManagerFactoryBean.setPackagesToScan("com.smartintranet.model"); 
     entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class); 
     entityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter()); 
     entityManagerFactoryBean.setJpaDialect(new HibernateJpaDialect()); 
     Properties jpaProperties = new Properties(); 
     jpaProperties.put(PROPERTY_NAME_HIBERNATE_DIALECT, 
       env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT)); 
     jpaProperties.put(PROPERTY_NAME_HIBERNATE_FORMAT_SQL, 
       env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL)); 
     jpaProperties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, 
       env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL)); 
     jpaProperties.put(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO, 
       env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO)); 
/*  jpaProperties.put(PROPERTY_NAME_H_CONNECTION_PROVIDER, 
       env.getRequiredProperty(PROPERTY_NAME_H_CONNECTION_PROVIDER));*/ 
     entityManagerFactoryBean.setJpaProperties(jpaProperties); 
     entityManagerFactoryBean.afterPropertiesSet(); 
     return entityManagerFactoryBean; 
    } 

    @Bean 
    public SharedEntityManagerBean sharedEntityManager() throws ClassNotFoundException { 
     SharedEntityManagerBean sharedEntityManagerBean = new SharedEntityManagerBean(); 
     sharedEntityManagerBean.setEntityManagerFactory(entityManagerFactory().getObject()); 
     return new SharedEntityManagerBean(); 
    } 

    @Bean 
    public JpaVendorAdapter jpaVendorAdapter() { 
     AbstractJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter(); 

     jpaVendorAdapter.setDatabasePlatform(env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT)); 
     jpaVendorAdapter.setShowSql(env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL, Boolean.class)); 

     return jpaVendorAdapter; 
    } 
} 

И кот журнал ошибок:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [com/smartintranet/configuration/DataAccessConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1119) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1014) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4726) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1618) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:463) 
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:413) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466) 
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) 
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307) 
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399) 
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:828) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323) 
    at sun.rmi.transport.Transport$1.run(Transport.java:178) 
    at sun.rmi.transport.Transport$1.run(Transport.java:175) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:174) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:557) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:671) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
    ... 57 more 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1239) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:855) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845) 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844) 
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) 
    at com.smartintranet.configuration.DataAccessConfig.entityManagerFactory(DataAccessConfig.java:77) 
    at com.smartintranet.configuration.DataAccessConfig$$EnhancerBySpringCGLIB$$78c2f955.CGLIB$entityManagerFactory$2(<generated>) 
    at com.smartintranet.configuration.DataAccessConfig$$EnhancerBySpringCGLIB$$78c2f955$$FastClassBySpringCGLIB$$30bdb581.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:309) 
    at com.smartintranet.configuration.DataAccessConfig$$EnhancerBySpringCGLIB$$78c2f955.entityManagerFactory(<generated>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
    ... 58 more 
Caused by: org.hibernate.MappingException: Could not determine type for: org.jadira.usertype.dateandtime.joda.PersistentLocalDate 
    at org.hibernate.cfg.annotations.SimpleValueBinder.fillSimpleValue(SimpleValueBinder.java:510) 
    at org.hibernate.cfg.SetSimpleValueTypeSecondPass.doSecondPass(SetSimpleValueTypeSecondPass.java:42) 
    at org.hibernate.cfg.Configuration.processSecondPassesOfType(Configuration.java:1472) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1420) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852) 
    ... 75 more 
Caused by: org.hibernate.annotations.common.reflection.ClassLoadingException: Unable to load Class [org.jadira.usertype.dateandtime.joda.PersistentLocalDate] 
    at org.hibernate.annotations.common.util.StandardClassLoaderDelegateImpl.classForName(StandardClassLoaderDelegateImpl.java:60) 
    at org.hibernate.cfg.annotations.SimpleValueBinder.fillSimpleValue(SimpleValueBinder.java:491) 
    ... 80 more 
Caused by: java.lang.ClassNotFoundException: org.jadira.usertype.dateandtime.joda.PersistentLocalDate 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305) 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:344) 
    at org.hibernate.annotations.common.util.StandardClassLoaderDelegateImpl.classForName(StandardClassLoaderDelegateImpl.java:57) 
    ... 81 more 

Я буду очень благодарен для помощи.

---------- EDIT ---------------------

я не показал свою модель Entity, вот это является. Я использовал неправильный тип «import java.time.LocalDate»; insted из "import org.joda.time.LocalDate;"

import java.math.BigDecimal; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.validation.constraints.Digits; 
import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 

import org.hibernate.annotations.Type; 
import org.joda.time.LocalDate; 
import org.springframework.format.annotation.DateTimeFormat; 



@Entity 
@Table(name="EMPLOYEE") 
public class Employee { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @Size(min=3, max=50) 
    @Column(name = "NAME", nullable = false) 
    private String name; 

    @NotNull 
    @DateTimeFormat(pattern="dd/MM/yyyy") 
    @Column(name = "JOINING_DATE", nullable = false) 
    @Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDate") 
    private LocalDate joiningDate; 

    @NotNull 
    @Digits(integer=8, fraction=2) 
    @Column(name = "SALARY", nullable = false) 
    private BigDecimal salary; 

    @Column(name = "SSN", unique=true, nullable = false) 
    private String ssn; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public LocalDate getJoiningDate() { 
     return joiningDate; 
    } 

    public void setJoiningDate(LocalDate joiningDate) { 
     this.joiningDate = joiningDate; 
    } 

    public BigDecimal getSalary() { 
     return salary; 
    } 

    public void setSalary(BigDecimal salary) { 
     this.salary = salary; 
    } 

    public String getSsn() { 
     return ssn; 
    } 

    public void setSsn(String ssn) { 
     this.ssn = ssn; 
    } 

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

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (!(obj instanceof Employee)) 
      return false; 
     Employee other = (Employee) obj; 
     if (id != other.id) 
      return false; 
     if (ssn == null) { 
      if (other.ssn != null) 
       return false; 
     } else if (!ssn.equals(other.ssn)) 
      return false; 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "Employee [id=" + id + ", name=" + name + ", joiningDate=" 
       + joiningDate + ", salary=" + salary + ", ssn=" + ssn + "]"; 
    } 
} 

Thx за помощью @Master Mind

ответ

1

Вы используете класс DateTime Joda в ваших моделях, но whitout указав тип отображения для него.

импорт в вашей сборке файл следующую depedency к вашему проекту:

org.jadira.usertype:usertype.core 

и это код

entityManagerFactory.getJpaPropertyMap().put("jadira.usertype.autoRegisterUserTypes", "true"); 
Смежные вопросы