【问题标题】:Spring Data Jpa ProblemsSpring Data Jpa 问题
【发布时间】:2016-06-10 17:17:40
【问题描述】:

大家好,第一个对不起我的英语不好, 我正在使用spring框架并配置了注释但存在错误

这是我用于 dispatcherServlet 的 WebAppInitializer 类

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
    return new Class<?>[] {RootConfig.class};
}

//Cofiguración especifica de clases
@Override
protected Class<?>[] getServletConfigClasses() {
    return new Class<?>[] {WebConfig.class};   
}

/**
 * Mapeo de DispatcherSerbvlet
 * @return 
 */
@Override
protected String[] getServletMappings() {
    return new String[]{"/"};
}
}

这个用于扫描弹簧组件的 Rootconfig 类

@Configuration
@ComponentScan(basePackages = {"com.factory.soft.web"},
            excludeFilters = {
            @Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)})
public class RootConfig {}

最后一个类WebConfig

@Configuration
@EnableWebMvc //Habilita SpringMVC

@ComponentScan("com.factory.soft")
public class WebConfig extends WebMvcConfigurerAdapter{
/**
 * El resolvedor de vistas de jsp
 * @return 
 */
@Bean
public ViewResolver viewResolver(){
    InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".jsp");
    resolver.setExposeContextBeansAsAttributes(true);
    resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
    return resolver;
}
@Bean
public PersistenceAnnotationBeanPostProcessor paPostProcessor() {
    return new PersistenceAnnotationBeanPostProcessor();
}
/**
 * Configure Static contentc handling
 * @param configurer 
 */
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}}

对于 JPA 配置

@Configuration
@EnableJpaRepositories(basePackages="com.factory.soft.repository")
public class JPAConfig {

@Bean
public DataSource dataSource(){
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/db");
    dataSource.setUsername("user");
    dataSource.setPassword("password");
    return null;
}

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
    return new PersistenceExceptionTranslationPostProcessor();
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
    LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
    emfb.setDataSource(dataSource());
    emfb.setPersistenceUnitName("SOFTPU");
    JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    emfb.setJpaVendorAdapter(vendorAdapter);
    emfb.setJpaProperties(additionalProperties());
    emfb.setPackagesToScan("com.factory.soft.domain");
    return emfb;
}

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(emf);
    return transactionManager;
}

Properties additionalProperties() {
    Properties properties = new Properties();
    properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
    properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
    return properties;
}

@Bean
public HibernateJpaVendorAdapter jpaVendorAdapter() {
  HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
  adapter.setDatabase(Database.MYSQL);
  adapter.setShowSql(true);
  adapter.setGenerateDdl(true);
  return adapter;
}}

这是netbeans的错误轨迹

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'exceptionTranslation' defined in class path resource [com/factory/soft/data/JPAConfig.class]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:220)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:618)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:467)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:530)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1241)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:847)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:85)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1572)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1540)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
... 32 more
Caused by: java.lang.ClassNotFoundException: org.aopalliance.aop.Advice
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1295)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1147)
... 36 more

【问题讨论】:

  • 你能发布你的pom.xml吗?

标签: java spring spring-mvc spring-data spring-data-jpa


【解决方案1】:

您似乎需要关注 Jar (java.lang.ClassNotFoundException: org.aopalliance.aop.Advice):

aopalliance-1.0.jar

请从http://aopalliance.sourceforge.net/ 下载上述Jar 并添加到您的Web 应用程序的lib 文件夹中。或者,如果您使用的是maven,则可以将以下依赖项添加到您的pom.xml

<dependency>
    <groupId>aopalliance</groupId>
    <artifactId>aopalliance</artifactId>
    <version>1.0</version>
</dependency>

【讨论】:

    【解决方案2】:

    两个问题,

    1.在POM中添加AOP相关的依赖

    2.你在JPAConfig类中以null的形式返回dataSource

    @Bean
    public DataSource dataSource(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/db");
        dataSource.setUsername("user");
        dataSource.setPassword("password");
        return null;
    }
    

    将返回值改为dataSource

    【讨论】:

    • 感谢我添加了 AOP 并返回数据源,但现在出现其他错误 org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read Candidate component class: file [C:\U\U\Documents\ soft\build\web\WEB-INF\classes\com\factory\soft\data\JPAConfig.class];嵌套异常是 java.lang.NoClassDefFoundError: org/springframework/data/repository/query/QueryLookupStrategy$Key
    • 请张贴您的pom.xml ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2016-04-09
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2021-11-06
    相关资源
    最近更新 更多