【问题标题】:Spring Data JPA - Creating custom query method generatorSpring Data JPA - 创建自定义查询方法生成器
【发布时间】:2020-01-23 09:47:00
【问题描述】:

在 Spring Data JPA 中,我们可以定义一个扩展 Repository 的存储库接口并编写自定义方法。

如果该方法遵循特殊语法,Spring Data 会自动生成方法体。

例如(来自文档):

interface PersonRepository extends Repository<Person, Long> {
    List<Person> findByLastname(String lastname);
}

有没有办法自定义方法生成代码以在语法中引入新的关键字?

例如:

Person findExactlyOneById(Long id);

此方法将返回实体或抛出自定义异常。

我知道我可以自定义特定的存储库以及基础存储库并实现上述示例的效果,但我特别要求自动生成正文的方法。

框架中是否设计了扩展点?还是只能更改源代码?

【问题讨论】:

  • 你需要这个做什么?我看不到用例。

标签: java spring spring-data-jpa spring-data


【解决方案1】:

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

【讨论】:

  • 这不是问题的答案,是吗?而是一条评论说“你不需要你想要的东西。”我认为你是对的。
  • findExactlyOneById 只是一个例子,不是我需要解决的问题。我确实使用 JpaRepository。这没有回答我的问题。
【解决方案2】:

您可以像这样在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 数据docs 可能也值得一看。

更多示例 1.

public interface UserRepository extends JpaRepository<User, Long> {

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

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 2022-01-23
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2012-09-13
    • 2019-03-10
    相关资源
    最近更新 更多