【问题标题】:Jhispter Repository Custom @QueryJhipster 存储库自定义 @Query
【发布时间】:2020-06-12 07:50:34
【问题描述】:

我的数据库中有 2 个表,ProfesorInfoStudentInfo 是一对多关系。我想建立一个自定义查询来获取与某个教授有关系的所有学生,给定教授的 id。 类似的东西:

@SuppressWarnings("unused")
@Repository
public interface StudentInfoRepository extends JpaRepository<StudentInfo, Long> {

    @Query("SELECT * FROM StudentInfo WHERE ProfesorID = profesorId")
    List<StudentInfo> findAllByProfesorID(Long profesorId);

@Query 似乎不起作用。为什么会这样,我怎样才能让它发挥作用?

【问题讨论】:

    标签: spring spring-data-jpa repository jhipster spring-repositories


    【解决方案1】:

    我认为您没有正确使用查询参数,它应该看起来像这样:

    import org.springframework.data.repository.query.Param;
    ... 
    @SuppressWarnings("unused")
    @Repository
    public interface StudentInfoRepository extends JpaRepository<StudentInfo, Long> {
    
        @Query("SELECT s FROM StudentInfo s WHERE s.ProfesorID = :profesorId")
        List<StudentInfo> findAllByProfesorID(@Param("profesorId") Long profesorId);
    

    冒号告诉 JPA,下一个单词是一个变量,应该替换为具有相同名称的 @Param 的值。

    想象一个@Query 必须直接在您的Java 对象中导航、加载和过滤实体。我这样说是因为您的字段名称ProfesorID 以大写“P”开头看起来很奇怪。如果此字段在您的 java 实体中被命名为 profesorID,那么当您想在 jpa 查询中访问它时,它应该被命名为相同。

    如果您想了解更多信息,here 是一个很好的示例指南。

    【讨论】:

    • 我的印象是使用@Query 是在直接查询数据库(而不是使用JPA 类)。因此,我使用的是基本 SQL。字段名称ProfesorID 确实不存在于我的java 实体中,它直接取自我的h2 数据库中的StudentInfo 表。谢谢你的回答!
    • 没问题,其实可以直接设置nativeQuery = true查询数据库。更多信息here(向下滚动到本地查询)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2018-02-09
    • 2018-10-06
    • 2018-01-05
    • 2016-07-17
    • 2017-09-02
    相关资源
    最近更新 更多