spring-boot - 查询中的 JPA 似乎没有返回任何结果
问题描述
我正在尝试运行 in 查询(springboot+jpa+mysql)。我启用了调试日志,查询似乎很好,但是 spring jpa 没有返回任何结果。
以下是配置:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- Spring dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
<scope>runtime</scope>
</dependency>
</dependencies>
这是我的存储库:
@Query(value = "select * from targeting_locations where targeting_location_master_id in (:targetingLocationMasterIds)", nativeQuery = true)
List<TargetingLocations> findAllByTargetingLocationMasterIdIn(@Param("targetingLocationMasterIds") List<Long> targetingLocationMasterIds);
// 或者
@Query("SELECT t FROM TargetingLocations t WHERE t.targetingLocationMasterId IN :targetingLocationMasterIds")
List<TargetingLocations> findAllByTargetingLocationMasterIdIn(@Param("targetingLocationMasterIds") List<Long> targetingLocationMasterIds);
这里需要注意的是,'in'查询中的列不是主键。
@Entity
@Table(name = "targeting_locations")
public class TargetingLocations {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
@Column(name = "geohash")
public String geoHash;
@Column(name = "site_name")
public String siteName;
@Column(name = "city")
public String city;
@Column(name = "country")
public String country;
@Column(name = "state")
public String state;
@Column(name = "latitude")
public Double latitude;
@Column(name = "longitude")
public Double longitude;
@Column(name = "targeting_type")
public String targetingType;
@Column(name = "targeting_data")
public String targetingData;
@Column(name = "targeting_location_master_id")
public Long targetingLocationMasterId; // ----> in query in this column
生成的查询:
Hibernate:
select
targetingl0_.id as id1_1_,
targetingl0_.city as city2_1_,
targetingl0_.country as country3_1_,
targetingl0_.geohash as geohash4_1_,
targetingl0_.latitude as latitude5_1_,
targetingl0_.longitude as longitud6_1_,
targetingl0_.site_name as site_nam7_1_,
targetingl0_.state as state8_1_,
targetingl0_.targeting_data as targetin9_1_,
targetingl0_.targeting_location_master_id as targeti10_1_,
targetingl0_.targeting_type as targeti11_1_
from
targeting_locations targetingl0_
where
targetingl0_.targeting_location_master_id in (
?
)
2021-02-23 16:22:46.199 TRACE 28282 --- [ main] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [13063]
解决方案
只需在您的存储库中将其定义为方法即可。
List<TargetingLocations> findByTargetingLocationMasterIdIn(List<Long> targetingLocationMasterIds);
删除@Query
,名称也应以 findBy... 开头,而不是 findAll...
您想要实现的将被实施并自动来自 spring-jpa
推荐阅读
- php - 从数组中减去只是删除前 2 个字符?
- android - Android 模拟器:无法初始化 WHPX
- java - Firebase - Firestore 数据查询两次调用两次
- android - JSON 解析需要 30 秒
- c# - .Net Core 响应重定向另一个视图
- java - 无法在 adb shell 中使用 su 命令
- sql - 从一系列带有日期的发票中,我如何按发票月份和上一个发票月份汇总它们?
- sql - ORA-00904: "TYPE": 触发器上的标识符无效。我哪里出错了?
- cordova - 在科尔多瓦与 whatsapp 共享音频文件
- sql - oracle中带有时间的随机日期