gpt4 book ai didi

mysql - 选择实体包含列表的位置,哪些元素具有另一个列表

转载 作者:行者123 更新时间:2023-11-29 17:17:58 25 4
gpt4 key购买 nike

我正在 spring JPA 中编写 JPQL 查询,并且有以下场景。我有一个实体 Margin,其中包含 PerPeriodMargin 列表,PerPeriodMargin 的每个元素都包含 MarginFactor 列表。代码:

@Entity
public class Margin {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "margin", cascade = CascadeType.ALL, orphanRemoval = true)
private List<PerPeriodMargin> perPeriodMargins;
}


@Entity
public class PerPeriodMargin{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
private Margin margin;
@OneToMany(mappedBy = "perPeriodMargin", cascade = CascadeType.ALL, orphanRemoval = true)
private List<MarginFactor> marginFactors;
}

@Entity
public class MarginFactor{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
private Underlying underlying;
@ManyToOne
private PerPeriodMargin perPeriodMargin;
}

我想选择所有 Margin,其中 MarginFactorunderlying.id 在单个 jpql 查询中作为参数传递?有什么建议吗?

我通过 application.properties“logging.level.org.hibernate.SQL=DEBUG”中的这一行激活了 hibernate 日志记录,并且我对生成的 SQL 查询感到困惑。多重连接似乎有问题。谁能解释一下这一点。

从 margin m 中选择 * 在 m.id = ppm.margin_id 上连接 per_period_margin ppm 在 ppm.id = mf.per_period_margin_id 上连接 margin_factor mf 其中 mf.underlying_id = ? and m.id = (从交易账户 ta 中选择 margin_id,其中 ta.id = ?)

以及 perPeriodMargin

选择 perperiodm0_.margin_id 作为 margin_i5_12_0_、perperiodm0_.id 作为 id1_12_0_、perperiodm0_.id 作为 id1_12_1_、perperiodm0_.end_time 作为 end_time2_12_1_、perperiodm0_.margin_id 作为 margin_i5_12_1_、perperiodm0_.name 作为 name3_12_1_, perperiodm0_.start_time 作为 per_period_margin 中的 start_ti4_12_1_ perperiodm0_ 哪里 perperiodm0_.margin_id=?

到目前为止,一切都很好。

最后还有另外两个查询尝试获取 marginFactors。

选择 marginfact0_.per_period_margin_id 作为 per_peri6_9_0_,marginfact0_.id 作为 id1_9_0_,marginfact0_.id 作为 id1_9_1_,marginfact0_.bid 作为 bid2_9_1_,marginfact0_.notional 作为 notional3_9_1_,marginfact0_.offer 作为 Offer4_9_1_,marginfact0_.per _period_margin_id 为 per_peri6_9_1_,marginfact0_.settlement 为结算me5_9_1_,marginfact0_.underlying_id为underlyi7_9_1_,underlying1_.id为id1_24_2_,underlying1_.digits为digits2_24_2_,underlying1_.display为display3_24_2_,underlying1_.enable为enable4_24_2_,underlying1_.enable_buy为enable_b5_24_2_,underlying1_.enable _销售为enable_s6_24_2_,underlying1_.focus_digits为focus_di7_24_2_, underlying1_.focus_position 为 focus_po8_24_2_、underlying1_.left_currency_id 为 left_cu11_24_2_、underlying1_.name 为 name9_24_2_、underlying1_.right_currency_id 为 right_c12_24_2_、underlying1_.temporary_disable 为 tempora10_24_2_、currency2_.id 为 id1_3_3_、currency2_.digits 为digits2_3_3_,currency2_.enable_buy 为enable_b3_3_3_,currency2_。 enable_sell 为enable_s4_3_3_,currency2_.name 为name5_3_3_,currency2_.symbol 为symbol6_3_3_,currency2_.temporary_disable 为temporar7_3_3_,currency3_.id 为id1_3_4_,currency3_.digits 为digits2_3_4_,currency3_.enable_buy 为enable_b3_3_4_,currency3_.enable _sell为enable_s4_3_4_,currency3_.name为name5_3_4_、currency3_.symbol 为 symbol6_3_4_、currency3_.temporary_disable 为 temporar7_3_4_,来自 margin_factor marginfact0_ 左外连接底层底层 1_ 上的 marginfact0_.underlying_id=underlying1_.id 左外连接货币currency2_ 上底层 1_.left_currency_id=currency2_.id 左外连接货币currency3_ 上底层 1_。 right_currency_id=currency3_.id 其中 marginfact0_.per_period_margin_id=?

正如我们在最后一个查询中看到的,perPeriodmarginId 上只有一个 where 条件。因为我认为它还必须包含底层条件,因为此查询负责获取 marginFactors,我们必须在其中提取具有特定底层 ID 的数据。

我真的很认真地回答这个问题,请有人解释一下,还是这是 hibernate 中的一个错误!

最佳答案

这是查询:

select m 
FROM Margin m
JOIN m.perPeriodMargins ppm
JOIN ppm.marginFactors mf
JOIN mf.underlying und
WHERE und.id = :id

关于mysql - 选择实体包含列表的位置,哪些元素具有另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51440527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com