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

遇到的问题:

SpringDateJpa — findOne()方法报错问题以及getOne()_第1张图片

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

我先是用的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, ID extends Serializable> extends Repository, ID> {
    extends T> S save(S var1);

    extends T> Iterable save(Iterable var1);

    T findOne(ID var1);

    boolean exists(ID var1);

    Iterable findAll();

    Iterable findAll(Iterable var1);

    long count();

    void delete(ID var1);

    void delete(T var1);

    void delete(Iterableextends T> var1);

    void deleteAll();
}

2.x.x版本的CrudRepository类是这样的:

@NoRepositoryBean
public interface CrudRepository, ID> extends Repository, ID> {
    extends T> S save(S var1);

    extends T> Iterable saveAll(Iterable var1);

    Optional findById(ID var1);

    boolean existsById(ID var1);

    Iterable findAll();

    Iterable findAllById(Iterable var1);

    long count();

    void deleteById(ID var1);

    void delete(T var1);

    void deleteAll(Iterableextends T> var1);

    void deleteAll();
}

发现了吗?     findOne方法不在CrudRepository中了

而现在的findOne去了哪里呢?

public interface QueryByExampleExecutor {
    extends T> Optional findOne(Example var1);

    extends T> Iterable findAll(Example var1);

    extends T> Iterable findAll(Example var1, Sort var2);

    extends T> Page findAll(Example var1, Pageable var2);

    extends T> long count(Example var1);

    extends T> boolean exists(Example var1);
}

你可能感兴趣的:(SpringBoot)