原文地址:https://www.miaoroom.com/code/note/springdatajpa-findone-bug.html
出处:喵容
首先我说一下我遇到问题的由来,视频中用的是 SpringDataJPA
的1.11版本,可以使用 findOne()
方法根据id查询,然后我使用了2.0.5版本,发现 findOne()
方法报错了,不能用来当作根据id查询了。
下面是报错的代码:
package com.miaoroom.sell.repository; import com.miaoroom.sell.dataobject.ProductCategory; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.*; /** * @Description: TODO * @create: 2019/1/19 14:51 * @author: znnnnn */ @RunWith(SpringRunner.class) @SpringBootTest public class ProductCategoryRepositoryTest { @Autowired private ProductCategoryRepository repository; @Test public void findOneTest() { //ProductCategory productCategory = repository.findOne(1);//这一行报错 ProductCategory productCategory = repository.findById(1).get(); System.out.println(productCategory.toString()); } }
2.0.5的已经变成了findById(id).get()来查询了。这是两个不同的版本,源码已经发生变化。后来去找源码中的findOne方法发现,findOne方法已经变了。想了解跟多的朋友可以去https://projects.spring.io/spring-boot/了解。
@NoRepositoryBean public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> { <S extends T> S save(S var1); <S extends T> Iterable<S> save(Iterable<S> var1); T findOne(ID var1); boolean exists(ID var1); Iterable<T> findAll(); Iterable<T> findAll(Iterable<ID> var1); long count(); void delete(ID var1); void delete(T var1); void delete(Iterable<? extends T> var1); void deleteAll(); }
@NoRepositoryBean public interface CrudRepository<T, ID> extends Repository<T, ID> { <S extends T> S save(S var1); <S extends T> Iterable<S> saveAll(Iterable<S> var1); Optional<T> findById(ID var1); boolean existsById(ID var1); Iterable<T> findAll(); Iterable<T> findAllById(Iterable<ID> var1); long count(); void deleteById(ID var1); void delete(T var1); void deleteAll(Iterable<? extends T> var1); void deleteAll(); }
发现了吗? findOne
方法不在 CrudRepository
中了
而现在的findOne去了哪里呢?
public interface QueryByExampleExecutor<T> { <S extends T> Optional<S> findOne(Example<S> var1); <S extends T> Iterable<S> findAll(Example<S> var1); <S extends T> Iterable<S> findAll(Example<S> var1, Sort var2); <S extends T> Page<S> findAll(Example<S> var1, Pageable var2); <S extends T> long count(Example<S> var1); <S extends T> boolean exists(Example<S> var1); }