2017-02-10 32 views
0

當我嘗試在Spring Data Repository方法上使用@Async時,出現以下錯誤:如何使彈簧數據@Async工作?錯誤:PersistentEntity不能爲空

{「cause」:null,「message」:「PersistentEntity must not null! 「}

彷彿它嘗試序列CompletableFuture <>。

的倉庫代碼:

@Query("SELECT p FROM Produto p where descricao LIKE CONCAT(UPPER(:like),'%')") 
@Async 
CompletableFuture<List<Produto>> findByLikeAsync(@Param("like") String like); 

配置:

@SpringBootApplication 
@EntityScan(basePackages = {"..."}) 
@EnableJpaRepositories(basePackages = {"..."}) 
@EnableAsync 
@Configuration 
public class Application implements AsyncConfigurer { 
    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    public Executor getAsyncExecutor() { 
     ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 
     executor.setCorePoolSize(7); 
     executor.setMaxPoolSize(42); 
     executor.setQueueCapacity(11); 
     executor.setThreadNamePrefix("MyExecutor-"); 
     executor.initialize(); 
     return executor; 
    } 

    @Override 
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { 
     return new CustomAsyncExceptionHandler(); 
    } 
} 

我曾嘗試使用未來<>而不是CompletableFuture <>,但它拋出了同樣的錯誤。

任何想法?

謝謝。

+1

爲什麼「持久性實體不能爲空」讓你覺得它試圖序列化'CompletableFuture'? stacktrace應該告訴你* real *錯誤在哪裏。 – Kayaman

回答

0

假設你正在使用CrudRepository,在倉庫中的方法只能返回,他們正在登記(或它們的集合)的類。在這種情況下,如果你定義了你的資料庫是:

public interface ProdutoRepository extends CrudRepository<Produto, Long>

您必須返回List<Produto>。您可以創建一個@Service調用此,有一個公共的方法與@Async有註釋。

+0

我正在直接調用Async方法。我一定做錯了什麼。我剛開始學習春天,也許我誤解了一些東西。 –