【问题标题】:Execute more than one SQL query in MariaDB在 MariaDB 中执行多个 SQL 查询
【发布时间】:2018-12-16 15:13:05
【问题描述】:

我在执行多个 Rest api 调用时遇到 MariaDB 问题:

17:05:53,188 ERROR [org.springframework.boot.web.servlet.support.ErrorPageFilter] (default task-1) Forwarding to error page from request [/processinglogs] due to exception [null]: java.lang.NullPointerException
    at deployment.datalis_admin.war//org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:147)
    at deployment.datalis_admin.war//org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:83)
    at deployment.datalis_admin.war//org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:44)
    at deployment.datalis_admin.war//org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1415)
    at deployment.datalis_admin.war//org.hibernate.internal.SessionImpl.list(SessionImpl.java:1501)
    at deployment.datalis_admin.war//org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1537)
    at deployment.datalis_admin.war//org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505)
    at deployment.datalis_admin.war//org.hibernate.query.Query.getResultList(Query.java:135)
    at deployment.datalis_admin.war//org.datalis.admin.backend.repo.ProcessingLogsRepositoryImpl.findAll(ProcessingLogsRepositoryImpl.java:111)
    at deployment.datalis_admin.war//org.datalis.admin.backend.repo.ProcessingLogsRepositoryImpl$$FastClassBySpringCGLIB$$5da64ca3.invoke(<generated>)
    at deployment.datalis_admin.war//org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

我在这一行得到 NPE:

@Override
    public List<ProcessingLogs> findAll(Specification<ProcessingLogs> spec) {
        String hql = "select e from " + ProcessingLogs.class.getName() + " e";
        TypedQuery<ProcessingLogs> query = entityManager.createQuery(hql, ProcessingLogs.class);
        List<ProcessingLogs> processinglogs = query.getResultList();
        return processinglogs;
    }

我在 Ubuntu 服务器上使用最新的 MariDB,没有任何额外的调整配置。你知道我需要增加一些限制来解决这个问题吗?

完整日志https://pastebin.com/a5HKqSkQ

【问题讨论】:

  • 你能告诉我们生成的SQL吗?
  • 我发现了问题。我缺少公共 PlatformTransactionManager transactionManager() 的配置.....
  • 好吧,通过提供配置的详细信息来回答您自己的问题。

标签: spring spring-boot jpa spring-data-jpa mariadb


【解决方案1】:

我使用这个配置解决了这个问题:

@Configuration
@EnableTransactionManagement
public class ContextDatasource {

    @Bean
    public EntityManager entityManager(EntityManagerFactory emf) {
        return emf.createEntityManager();
    }

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

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

【讨论】:

    最近更新 更多