mysql - Spring Data JPA - 对 crud 存储库的 native 查询与连接一起使用?

标签 mysql spring hibernate spring-data-jpa

我有一个扩展 CrudRepository 的接口(interface),并实现了一个带有 @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);
}

车库有一个许可证
许可证有一个计划和车库
Plan有很多MessageTemplate

License 类与 Plan 具有 ManyToOne 关系,与 Garage 具有 OneToOne 关系
(表许可证 - fk_plan 和 fk_garage 列)

类 Plan 与 MessageTemplate 具有多对多关系
(表 plan_granted_template - 列 fk_plan 和 fk_message_template)

类 MessageTemplate 具有属性 messageType
(表 message_template - 列 message_type)

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

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

最佳答案

您需要将参数作为字符串和整数传递。 Hibernate 在这两种情况下都以这种方式记录:[BasicBinder:83]: binding parameter [1] as [INTEGER] - 1 [BasicBinder:83]: binding parameter [2] as [VARCHAR] - WELCOME.

不确定你的参数 MessageTemplate messageTemplate 是否与 template.message_type = ?1 兼容,你是否尝试传递 String messageTemplate,我的意思是查询中需要的 messageTemplate 和 String 之间的转换,尝试添加 DEBUG 以查看参数发送到数据库

更新 方法中的结束参数应该是字符串和整数,而不是类。

关于mysql - Spring Data JPA - 对 crud 存储库的 native 查询与连接一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21634597/

相关文章:

php - mysql查询问题和优化到一个查询

mysql - # 1248. 每个派生表必须有自己的别名

php - 如何从数据库中获取数据并在 PHP 中显示?

php - 获取两个日期之间的数据并按各个日期分组

mysql - 如何锁定 MySQL 行并稍后在应用程序上下文中释放

java - 如何从 docker compose 设置带有点的属性名称?

java - AnnotationConfigApplicationContext.getBean返回一个不同的bean,Spring

mysql - 是否可以在 Java 代码中实现数据库 'trigger'? (hibernate + jpa + spring + mysql)

java - (没有为参数4指定值)多对多关系错误

mysql - 事务管理超时问题