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

Spring Data JPA-crud存储库上的本机查询与联接一起工作?

壤驷凯
2023-03-14

我有一个接口,它扩展了CrudRepository并实现了一个带有@Query注释的方法,属性nativeQuery设置为true。此方法返回实体的列表。

示例:

public interface MessageTemplateRepository extends CrudRepository<MessageTemplate, Integer> {
  @Query(nativeQuery = true, "select template.* from plan_granted_template granted join license license on granted.fk_plan = license.fk_plan join message_template template on granted.fk_message_template = template.id where license.fk_garage = ?2 and template.message_type = ?1")
  public List<MessageTemplate> findGrantedTemplatesByMessageTypeAndGarage(MessageType messageType, Garage garage);
}

此方法应返回查询中找到的所有MessageTemplate实体,但始终返回空列表。在mysql中执行此查询将返回正确的结果。同样查看Hibernate日志,查询是使用正确的参数执行的,但仍然返回一个空列表。

我认为Spring执行了查询,但无法将resultSet转换为MessageTemplate实例。

共有1个答案

厍胤运
2023-03-14

您需要将参数作为字符串和整数传递。Hibernate在两种情况下都是这样记录的:[basicbinder:83]:绑定参数[1]为[INTEGER]-1[basicbinder:83]:绑定参数[2]为[VARCHAR]-欢迎。

不确定您的参数MessageTemplate MessageTemplate是否与模板配合良好。message_type=?1,您是否尝试过传递字符串MessageTemplate,我指的是查询中需要的MessageTemplate和字符串之间的转换,尝试添加DEBUG以查看发送到数据库的参数

方法中的UPDATE和end参数应该是string和int,而不是类。

 类似资料:
  • ..回购方法 我用DESC和ASC调用编写了一个单元测试,反之亦然,似乎第一个调用是什么,第二个调用给出的结果是一样的。

  • 本机查询为: 现在我有了表Hibernate实体,所以我在ApplicationRepository中尝试了 日志上说

  • 我想使用带有注释@query的Jpa存储库创建一个连接查询。 我有两张桌子: 和: 我的表实体

  • 问题内容: 我想通过注释@Query通过Jpa存储库进行Join查询。我有三个表。 本机查询是: 现在我有了Table Hibernate实体,所以我在ApplicationRepository中尝试过 日志说 意外的标记 有什么想法吗? 我的表实体 Application.java: Customer.java: User.java: 问题答案: 您不需要JPA中的ON子句,因为借助映射注释,J

  • 问题内容: 我想使用带有注释@Query的Jpa存储库进行Join查询。 我有两个表: 和: 本机查询是: 现在我有一个表休眠实体用户和区域 所以我尝试了UserRespository 日志说: 意外的标记: 有什么主意吗? 我的表实体 问题答案: 您遇到此问题的原因有两个。 JPQL查询无效。 您尚未在基础JPQL查询可以利用的实体之间创建关联。 在JPQL中执行联接时,必须确保尝试联接的实体之

  • 我有几个使用Spring Data JPA的实体类。(这些实体类位于安装了postgis的postgres db中,并包含几何字段。) 然而,当我切换到r2dbc时,它不起作用。任何提示都将不胜感激。 错误原因:java.lang.IllegalStateException:未找到类org.locationtech.jts.geom.Geometry的必需标识符属性!