我按照参考指南创建和自定义存储库,并提出了以下内容:
public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom {
}
@Transactional(readOnly = true)
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@Override
public User findByToken(UUID token) {
return new User();
}
}
public interface UserRepositoryCustom {
User findByToken(UUID token);
}
在我的情况下,userRepository.findByToken(token);
返回null。
@Edit
以下测试失败
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = NONE)
public class UserRepositoryTest {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private TestEntityManager entityManager;
@Autowired
private UserRepository userRepository;
@Test
public void test() throws Exception{
assertNotNull(userRepository.findByToken(UUID.randomUUID()));
}
}
答案 0 :(得分:1)
您的自定义实现名称错误。它应该以存储库的类名命名,而不是在声明自定义方法的接口之后命名。
刚刚将UserRepositoryCustomImpl
重命名为UserRepositoryImpl
该方法当前返回null
的原因是因为Spring Data根据名称创建了一个查询,并且没有找到具有指定标记的User
。