首页 > 解决方案 > 非相关实体的存储库上的 JPQL 查询

问题描述

我正在尝试从存储库(扩展 CrudRepository)对 @Query 发出 JPQL 请求,以获得以下结构:

@Entity 
@Table(name="Campaign")
public class Campaign {

 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 @Column(columnDefinition = "int(11)")
 private Long id; 
...
 private String displayName;
 private String smrtProject;
...}

@Entity 
@Table(name="CampaignFact")
public class CampaignFact{
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 @Column(columnDefinition = "int(11)")
 private Long id;

 @ManyToOne(fetch = FetchType.EAGER)
 @JoinColumn(name = "campaignId")
 private Campaign campaign;

 @ManyToOne(fetch = FetchType.EAGER)
 @JoinColumn(name = "callCenterId")
 private CallCenter callCenter;
...}

我要查询的是通过 callCenterId 获取与呼叫中心相关的所有活动。

到目前为止,我正在使用一个恢复良好的本机查询(MySql),我正在尝试这样做:

@Query(value = "SELECT c.* FROM CampaignFact cf Inner JOIN Campaign c ON c.id = cf.campaignId WHERE cf.callCenterId = ?1", nativeQuery = true)
List<Campaign> findByCallCenterIdNative(Long callCenterId);

那么要恢复如何在 JPQL 中重写这个 SQL 呢?PS:我正在这个存储库中工作:

public interface CampaignRepository extends CrudRepository<Campaign, Long> 

标签: javaspringspring-data-jpajpql

解决方案


既然你想要CampaignFact所以你需要有CampaignFactRepository,方法定义如下:

List<CampaignFact> findByCampaign_idAndCallCenter_id(Long callCenterId);

我没有运行它,因为我没有数据库,但创建正确的方法名称应该进行正确的 SQL 调用。参考Spring 文档

您也可以查看Spring Data JPA 教程


推荐阅读