弹簧数据JPA本机查询不会遵循预测的命名约定



我正在使用Spring Boot 2.1.3.Release,Spring Data JPA针对PostgreSQL数据库。

列名称使用下划线(例如created_by)和实体bean normal java camelcase createdBygetCreatedBy()等。

我试图用投影接口编写本机查询,但是我会恢复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);
}

当我运行此功能时,我将其恢复为无效的分离列(哪个通过非本地查询正常工作)。

作为一个实验,我在投影中添加了一种称为getCreated_by()的方法而且一个可以正常工作...

我不想重命名投影中的所有方法以实现强调他们的名字是因为看起来很丑。有没有办法获取本地查询与预测一起工作?

您可以明确地重命名查询中的字段以匹配投影接口中所需的方法名称。

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);
}

只需使用注释@Column,然后将列名实际设置为数据库中。另一个选项是将您的模式设置为自动创建并查看自动创建的模式。

最新更新