SpringDateJpa — findOne()方法报错问题以及getOne()

遇到的问题:


首先我说一下我遇到问题的由来

我先是用的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);
}

猜你喜欢

转载自blog.csdn.net/jae_wang/article/details/80531983