我正在使用Spring Boot 2.1.3.RELEASE,Spring Data JPA来处理PostgreSQL数据库。
列名使用下划线(例如created_by
),实体bean正常JavacamelCasecreatedBy
、getCreatedBy()
等。
我正在尝试使用投影接口编写本机查询,但我得到了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()的方法,这个方法很好用。。。
我不想重命名投影中的所有方法,使其名称中带有下划线,因为这看起来很难看。有没有办法让本机查询与投影一起工作?
只需使用注释列,并在数据库中物理设置列名。另一个选项是将模式设置为自动创建,并查看自动创建的模式。
您可以显式重命名查询中的字段以匹配投影界面中所需的方法名称。
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的本机查询中。我们如何才能做到这一点。它正在引发无效的查询参数异常。