java - 非相关实体的存储库上的 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>
解决方案
既然你想要CampaignFact
所以你需要有CampaignFactRepository
,方法定义如下:
List<CampaignFact> findByCampaign_idAndCallCenter_id(Long callCenterId);
我没有运行它,因为我没有数据库,但创建正确的方法名称应该进行正确的 SQL 调用。参考Spring 文档
您也可以查看Spring Data JPA 教程
推荐阅读
- postgresql - pgSQL-INSERT 前触发函数检查是否存在具有相同 ID 的记录
- angular - Angular 8 - 检查后表达式已更改
- algorithm - 寻找无重访图遍历路径(所有顶点)的优化策略
- confluent-platform - 无法在 Arcadia BI 工具中加载 KSQL 表
- flutter - 如何从方法中返回两个值
- r - 在 R 中合并具有许多不匹配列的多个大型数据框
- excel - 修改文件信息的VBA飞跃1小时
- julia - 如何访问 Julia 的 CuArray 中的元素并更改其值?
- android-studio - Android Studio 3.6.3 更新不会在单击“运行”图标时启动 apk
- javascript - Promise 中的多个 resolve() 调用返回异步函数