プロジェクトで永続性のためにHibernate/JPA 2.1を使用しています。継承マッピングを使用してマッピングされたエンティティを参照する複数のオブジェクトが挿入され、次にクエリが更新されます
@Entity
@Table(name = "tbl_financial_instrument")
public class FinancialInstrument {
@Embedded
private InterestRate interestRate;
// ...
}
@Embeddable
public class InterestRate {
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "ir_id")
private Set<InterestPaymentPlanStep> interestPaymentPlanSteps = new LinkedHashSet<>();
// ...
}
計画段階が異なるクラスで再利用することができ、私はここに継承を使用(単一のテーブル:私はPlanStep
のいくつかの次のマッピングが設定されている埋め込みフィールドinterestRate
を、持っているFinancialInstrument
を、保存しようタイプ)。
@Entity
@DiscriminatorValue("INTEREST_PAYMENT")
public class InterestPaymentPlanStep extends PlanStep {
// ...
}
@Entity
@Table(name = "tbl_plan_step")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "PLAN_STEP_TYPE", discriminatorType = DiscriminatorType.STRING)
public abstract class PlanStep extends AbstractBaseObject {
// ...
}
私はFinancial InstrumentにInterestRateを入力しました。これには計画ステップが含まれています。今、私はこのコードを使用して、データベースへのすべてを持続しようとしている:
private void persistFinancialInstrument(FinancialInstrument financialInstrument) {
financialInstrument = financialInstrumentRepository.save(financialInstrument);
if (financialInstrument.getInterestRate() != null) {
Set<InterestPaymentPlanStep> interestRatePaymentPlanSteps = financialInstrument.getInterestRate().getInterestPaymentPlanSteps();
for (PlanStep planStep : interestRatePaymentPlanSteps) {
planStepRepository.save(planStep);
}
}
}
奇妙なことは、今、私は私のクエリのログ記録をオンにしたとき、私はそれがプランの手順を永続化するために2つのクエリを実行していることがわかりということです:
insert into tbl_plan_step (creation_datetime, modification_datetime, amount, anchor_date, cap, cycle, floor, rate_add, rate_value, plan_step_type, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, 'INTEREST_PAYMENT', ?)
2つ目:
をこれは最初のものであるが、私はすでにここでそれを期待しながら、それが金融商品のIDが含まれていないことに注意してください
update tbl_plan_step set ir_id=? where id=?
なぜ2つのクエリで保存が実行されているのかわかりません。誰もこれについての説明を見つけることができますか?
逆の関係も書いてみましたか? InterestPaymentPlanStepの@ManyToOne –