SpringDateJpa — findOne()方法報錯問題以及getOne()
阿新 • • 發佈:2019-01-04
遇到的問題:
首先我說一下我遇到問題的由來
我先是用的SpringDataJPA的1.11版本,可以使用findOne()方法根據id查詢,
然後我使用了2.0.5版本,發現findOne()方法報錯了,不能用來當作根據id查詢了,
- getOne 當查詢一個不存在的id資料時,會直接丟擲異常,因為其返回的是一個引用,簡單就是說一個代理物件。
- 無論如何都想要有一個返回,則使用findOne,而不用getOne。
2.0.5的已經變成了findById(id).get()來查詢了。
這是兩個不同的版本,原始碼已經發生變化。
後來去找原始碼中的findOne方法發現,findOne方法已經變了。
想了解跟多的朋友可以去https://projects.spring.io/spring-boot/瞭解
1.xx版本的CrudRepository類是這樣的:
@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(); }
2.x.x版本的CrudRepository類是這樣的:
@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); }