Spring数据JPA save方法返回null

时间:2015-04-22 20:36:13

标签: hibernate maven jpa spring-data spring-data-jpa

我试图从JUnit测试用例中使用Spring Data JPA和Hibernate保存一个新实体。 save方法返回null。如果我从Eclipse运行" Run as JUnit"它工作正常,测试正在通过。但是,使用maven测试的相同测试用例因空指针而失败,因为JpaRepository的save方法返回null。有什么想法吗?

  • Spring数据 - 1.8.0.RELEASE
  • Hibernate - 4.3.8.Final
  • 春天 - 4.1.5.RELEASE
  • Maven - 3.2.5
  • Java8,Junit4

注意:我尝试了savesaveAndFlush,但没有运气。

服务类

Application appl=applicationRepository.saveAndFlush(application);//Returns null

存储库类

public interface ApplicationRepository extends JpaRepository<Application, Integer> {
    @Query(nativeQuery = true, 
           value = "select count (ap1.appn_id) cnt from appn ap1 where ...")
    List<BigInteger> countByCreatedTSLessThanEqual(String date);
}

1 个答案:

答案 0 :(得分:1)

我们也遇到了非常类似的问题。完全如您所描述的那样 - null findOne()之后的save()或 saveAndFlush() null 之后

在我们的例子中,原因是一个方面(Spring @Aspect)控制通过Spring JPA保存的数据

@Around("execution(public !void org.springframework.data.repository.Repository+.*(..))")

过滤掉了结果。确保您对存储库的调用没有任何方面,或者在必要时进行调整。

作为一种解决方法,我们还设法通过直接注入实体管理器并调用其方法来绕过方面。

@PersistenceContext
private EntityManager em;

em.joinTransaction();
final Application savedAppl = em.merge(application);