永続性のためにJPAエンティティと休止状態を使用しています。 私はPlan
エンティティとEscalation
エンティティを持っています。新しいエスカレーションを作成して永続化すると、計画は何とか更新されています。この更新により、OptimisticLockException
が発生し、エスカレーションが永続化されなくなりました。 ここでは、コードのスケルトンだ -新しい子エンティティが永続化されたときに親エンティティが不必要に更新される
@Entity
@Table(name = "T_ESCLT")
public class Escalation extends PersistentEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ESCLT_ID")
private Integer id;
@ReflectionCopy.Exclude
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CUST_RNEW_TASK_ID", nullable = false)
private CustomerRenewalTask renewalTask;
@ReflectionCopy.Exclude
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PLN_DSG_ID")
private Plan plan;
public Escalation(CustomerRenewalTask task, Plan plan, String description) {
Preconditions.checkNotNull(task);
Preconditions.checkNotNull(description);
this.renewalTask = task;
this.plan = plan;
this.description = description;
this.creationTimestamp = DateUtils.currentTimestamp();
}
Plan
とCustomerRenewalTask
はそれらにマッピングされたエスカレーションを持っていません。 私はこの
@Transactional
public Result persist() {
CustomerRenewalTask customerRenewalTask = customerRenewalTaskDao.findById(2);
Plan plan = planDao.findById(16);
planDao.detach(plan);
Escalation escalation = new Escalation(customerRenewalTask, plan, "My Escalation");
escalationDao.persist(escalation);
return ok();
}
を実行すると、私は計画上の更新がPlan
変わってしまった上で何として発行したくないコンソールログ
DEBUG - insert into T_ESCLT (ESCLT_ID, OPTMSTC_LOCK_ID, ATRB_NM, CMNT_TXT, CRT_TS, ESCLT_DSCR, APP_LNK_TXT, PLN_DSG_ID, RT_BLCK_IND, CUST_RNEW_TASK_ID, RSLV_DT, RSLV_BY_USR_ID, RSLV_BY_USR_NM, ESCLT_STTS_CD, ESCLT_TYP_CD) values (default, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
DEBUG - update T_PLN_DSG set OPTMSTC_LOCK_ID=?, ASSOC_PLN_DSG_ID=?, BRTH_DT_RT_IND=?, PLN_EFF_DT=?, ELGBL_MBR_CNT=?, RNEW_PLN_DTL_XML=?, SUM_MBR_PRTCP_LIF_CNT=?, VLD_STTS_CD=?, PLN_NM=?, PLN_GRP_ID=?, PRNT_PLN_DSG_ID=?, PRTCP_MBR_CNT=?, PRTCP_PCT=?, PRTNR_PLN_DSG_ID=?, RT_CALC_XML=?, UW_VRFY_IND=?, SUM_VOL_AMT=? where PLN_DSG_ID=? and OPTMSTC_LOCK_ID=?
でこれを参照してください。私はエスカレーションを作成する計画を使用しました。
が解決するかどうか
確認してくださいあなたはプランエンティティにattrsにを更新planDao.detach(案)の中で何かをやっているのでしょうか? – Franck
'Plan'エンティティのマッピングと' PlanDao'に関連メソッドの実装を投稿してください。 –
定義では、Hibernateに "汚れている"と思って、 'flush()'で更新する必要がある 'Plan'に何かをしている必要があります。 –