gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:48:13 25 4
gpt4 key购买 nike

我有一个扩展 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com