我试图从JUnit测试用例中使用Spring Data JPA和Hibernate保存一个新实体。 save
方法返回null。如果我从Eclipse运行" Run as JUnit"它工作正常,测试正在通过。但是,使用maven测试的相同测试用例因空指针而失败,因为JpaRepository的save
方法返回null。有什么想法吗?
注意:我尝试了save
和saveAndFlush
,但没有运气。
服务类
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);
}
答案 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);