我有一个接口,它扩展了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);
}
车库(Garage)有一个许可证(License)
许可证(License)有一个计划(Plan)和车库(Garage)
计划(Plan)有多个消息模板(MessageTemplate)
许可证(License)类与计划(Plan)类具有ManyToOne关系,与车库(Garage)类具有OneToOne关系
(表license-列fk_plan和fk_garage)
计划(Plan)类与消息模板(MessageTemplate)类具有ManyToMany关系
(表plan_granted_template-列fk_plan和fk_message_template)
消息模板(MessageTemplate)类具有属性messageType
(表message_template-列message_type)
该方法应返回查询中找到的所有MessageTemplate实体,但始终返回空列表。 在mysql中执行此查询将返回正确的结果。 同时查看Hibernate日志,可以发现查询使用了正确的参数执行,但仍然返回一个空列表。
我认为Spring执行了查询,但无法将resultSet转换为MessageTemplate实例。