Spring Data JPA本地查询在投影方面没有遵循命名约定。

9

我正在使用Spring Boot 2.1.3.RELEASE,Spring Data JPA连接PostgreSQL数据库。

列名使用下划线(例如created_by),实体Bean使用普通的Java驼峰命名法(例如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);
}

当我运行它时,对于下划线分隔的列,我会得到null的返回值(使用非本地查询时工作正常)。
作为一个实验,我在我的投影中添加了一个名为getCreated_by()的方法,那个方法正常工作...
我不想将我的投影中所有方法的名称都重命名为带有下划线,因为那看起来很丑。是否有一种方法可以让本地查询与投影一起工作?
2个回答

1

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

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

-1

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


嗨 Vinay。感谢你的回复。这不起作用。我尝试在投影接口上明确设置@Column注释,但仍然不起作用。 - Nikolaos Georgiou

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