【问题标题】:Nested query in JPQLJPQL 中的嵌套查询
【发布时间】:2021-07-16 14:11:20
【问题描述】:

我有 2 个实体 -

@Table(name = "MM_MONITORING_CARD")
@Entity(name = "mm_MonitoringCard")
public class MonitoringCard extends StandardEntity {

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CLIENT_ID")
private Counterparty client;

@Column(name = "START_DATE")
private LocalDate startDate;

@Column(name = "END_DATE")
private LocalDate endDate;

...otherColumn
}

@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING)
@Table(name = "MM_COUNTERPARTY")
@Entity(name = "mm_Counterparty")
@DiscriminatorValue("COUNTERPARTY")
@NamePattern("%s|name")
public class Counterparty extends StandardEntity {

@Column(name = "TYPE", insertable=false, updateable=false)
private String type;

...otherColumn

我需要获取所有示例 monitoringCard 条件 - 1) 在开始日期和结束日期之间 2) Counterparty type = 'someType'

我做方法-

List<MonitoringCard> monitoringCardList = dataManager.load(MonitoringCard.class)
.query("select distinct cm from mm_MonitoringCard m join mm_Counterparty cm where (m.current_date between cm.startDate and cm.endDate) and cm.type = :type")
.parameter("type", "someType")
.list();

但我收到错误,我该如何提出正确的请求? 谢谢

【问题讨论】:

  • mm_MonitoringCard 和 mm_Counterparty 之间是否没有映射依赖关系?
  • mm_MonitoringCard 有一个字段@ManyToOne Counterparty

标签: sql database jpa jpql


【解决方案1】:

您的查询不正确。它应该使用这样的连接:

select distinct m.Counterparty from mm_MonitoringCard m 
where (m.current_date between m.Counterparty.startDate and m.Counterparty.endDate) 
  and m.Counterparty.type = :type

在 JPA 中,导航 ToOne 关系时不需要进行显式连接。

【讨论】:

    猜你喜欢
    • 2019-03-19
    • 2017-05-06
    • 1970-01-01
    • 2013-09-13
    • 2021-12-04
    • 2012-04-28
    • 2013-01-03
    • 2018-03-23
    • 2019-08-02
    相关资源
    最近更新 更多