Spring Data JPA - 创建自定义查询方法生成器

3
在Spring Data JPA中,我们可以定义一个扩展了Repository的存储库接口,并编写自定义方法。
如果此方法遵循特定的语法,Spring Data将自动生成方法体。
例如(来自文档):
interface PersonRepository extends Repository<Person, Long> {
    List<Person> findByLastname(String lastname);
}

有没有一种方法可以定制方法生成代码,引入新的关键字到语法中?

举个例子:

Person findExactlyOneById(Long id);

这种方法要么返回实体,要么抛出自定义异常。

我知道可以定制特定的仓库以及基础仓库,并实现上述示例中的效果,但我特别询问是否有框架中设计的扩展点?或者更改源代码是唯一的选择吗?


你需要它做什么?我看不出使用场景。 - Michael Piefel
2个回答

0
在您的情况下,您可以始终使用CrudRepository.findById(Long id)JpaRepository.getOne(Long id)。我建议从JpaRepository类继承,因为它包含了所有类型的存储库。

这不是对问题的回答,是吗?而是一条评论说“你不需要你所问的东西。”我认为你是正确的。 - Michael Piefel
findExactlyOneById只是一个例子,不是我需要解决的问题。我确实使用JpaRepository。这并没有回答我的问题。 - Novotny

-1

您可以在Repository类中的@Query注解中设置nativeQuery = true,如下所示:

public static final String FIND_PROJECTS = "SELECT projectId, projectName FROM projects";

@Query(value = FIND_PROJECTS, nativeQuery = true)
public List<Object[]> findProjects();

也许值得一看Spring数据文档

更多示例 1.

public interface UserRepository extends JpaRepository<User, Long> {

  @Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true)
  User findByEmailAddress(String emailAddress);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接