如何使用 Spring Data 中的投影覆盖 findById

cdx*_*dxf 1 spring spring-data spring-data-jpa

在我的存储库中,我需要将 Projection 用于 findById 方法:

@Repository
public interface ForumRepository extends CrudRepository<Forum,Integer> {
        ForumDTO findById(Integer id);
}
Run Code Online (Sandbox Code Playgroud)

但是由于 findByID 已经存在于 CrudRepository 中,所以我不能用不同的返回类型覆盖它,还有其他方法可以存档吗?

cdx*_*dxf 5

我刚刚发现我不需要覆盖它,因为我可以使用getBy代替findBy

public interface ForumRepository extends CrudRepository<Forum,Integer> {
        ForumDTO getById(Integer id);
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 5

或者,您可以概括该方法并传入 dto 类。

<T> T findById(Integer id, Class<T> type);
Run Code Online (Sandbox Code Playgroud)

这也适用于可选。

<T> Optional<T> findById(String id, Class<T> type);
Run Code Online (Sandbox Code Playgroud)

为了使用它,您必须传入您想要返回的类型。

ForumDTO forum = forumRepo.findById(378583, ForumDTO.class);
Run Code Online (Sandbox Code Playgroud)

来源:https ://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projection.dynamic