当前位置: 首页 > 知识库问答 >
问题:

Spring Data JPA本机查询不遵循投影的命名约定

终逸仙
2023-03-14

我正在使用Spring Boot 2.1.3.RELEASE,Spring Data JPA来处理PostgreSQL数据库。

列名使用下划线(例如created_by),实体bean正常JavacamelCasecreatedBygetCreatedBy()等。

我正在尝试使用投影接口编写本机查询,但我得到了null值。示例:

public class MyEntity {
    private String createdBy;
    // getters and setters etc
    // more fields here
}

public interface MyProjection {
    String getCreatedBy();
}

public interface MyRepository extends JpaRepository<MyEntity, Long> {
    @Query(value = "
       SELECT DISTINCT cool_table.* FROM cool_table INNER JOIN
       // more SQL things", nativeQuery = true
    )
    List<MyProjection> searchNative(String filter);
}

当我运行它时,下划线分隔列返回null(这对于非本机查询很好)。

作为一个实验,我在投影中添加了一个名为getCreated\u by()的方法,这个方法很好用。。。

我不想重命名投影中的所有方法,使其名称中带有下划线,因为这看起来很难看。有没有办法让本机查询与投影一起工作?

共有2个答案

越运锋
2023-03-14

只需使用注释列,并在数据库中物理设置列名。另一个选项是将模式设置为自动创建,并查看自动创建的模式。

章哲茂
2023-03-14

您可以显式重命名查询中的字段以匹配投影界面中所需的方法名称。

public interface MyProjection {
  String getCreatedBy();
}

public interface MyRepository extends JpaRepository<MyEntity, Long> {
  @Query(
    value = "SELECT cool_table.created_by AS createdBy ...",
    nativeQuery = true
  )
  List<MyProjection> searchNative(String filter);
}
 类似资料:
  • 谢谢你的帮助。我真的不明白我做错了什么。

  • 问题内容: 您好,我想按查询排除某些字段。我正在使用nodejs 但在结果集中,我一直在获取密码字段。 问题答案: 投影不适用于新的nodejs mongodb驱动程序…相反,您将不得不在 此处使用游标方法

  • 问题内容: 查询,本机查询,命名查询和类型查询之间有什么区别?“独立”查询是否存在,还是只是缩写?在我看来,本机查询是用简单sql编写的查询,而命名查询与实体(hibernate映射)有关。有人可以简要解释一下吗? 问题答案: 询问 查询是指JPQL / HQL查询,其语法类似于通常用于执行DML语句(CRUD操作)的SQL。 在JPA中,您可以使用创建查询。您可以查看API以获得更多详细信息。

  • 我有一个奇怪的问题,我不知道为什么会发生。我肯定我做错了什么,因为这是我第一次使用数据投影,而且我在使用DTOS时从来没有遇到过这样的问题。 我有一个SELECT statemen,它返回各种数据类型的某些列。我有一个接口,我将它传递给JPA存储库,这样它就可以进行接口映射。但是它不是根据列名映射结果(例如'accountnum'->),而是按照字母顺序映射列。因此,如果'date_of_orde

  • 我们希望将字符串列表传递到名为JPA的本机查询中。我们如何才能做到这一点。它正在引发无效的查询参数异常。