0
Hibernateのオブジェクトでエラー/別のエラー:休止するsaveOrUpdateマージ
プロバイダは - >これは、以前の私たちがプロバイダを更新/保存されたProviderStatusDetail
と多くの関係ProviderAddress と1との一対多の関係を持っていますオブジェクトをデータベースに追加します。すべてがうまくいきました。これで古い値をHistoryテーブルに保存し、次にProviderテーブルを保存/更新する必要があります。コードの
一部:
public void saveProvider(Provider provider) {
//Get Existing Data from Provider
Provider existingProvider = (Provider) this.getHibernateTemplate().get(Provider.class, provider.getProviderId());
ProviderHistory providerHistory = null;
providerHistory = new ProviderHistory();
providerHistory.setProviderId(existingProvider.getProviderId());
...
//Get Existing Data from Provider Status Detail
ProviderStatusDetail existingProviderStatusDetail = (ProviderStatusDetail) this.getHibernateTemplate().get(ProviderStatusDetail.class,
existingProvider.getProviderStatusDetails().get(0).getProviderStatusDetailId());
providerHistory.setTypeCode(existingProviderStatusDetail.getTypeCode());
...
// Save Provider History Table
this.getHibernateTemplate().save(providerHistory);
// Get Existing Address Details
Address address1 = this.getHibernateTemplate().get(Address.class,
existingProvider.getAddresses().get(0).getAddressId());
// Save exsiting Practice Address to Address History Table
ProviderAddressHistory practiceAdrHistory = null;
adrHistory = new ProviderAddressHistory();
adrHistory.setProviderId(provider.getProviderId());
...
this.getHibernateTemplate().save(practiceAdrHistory);
//Make some changes to the Status Detail Object
for (ProviderStatusDetail psd : provider.getProviderStatusDetails()) {
//Provider Type check
if (psd.getTypeCode() != null
&& psd.getTypeCode() == 0) {
psd.setTypeCode(null);
}
...
}
//Make sonme changes to Provider Object
if (provider != null) {
if (provider.getName() != null) {
if (provider.getName().getPrefix() == 0) {
provider.getName().setPrefix(null);
}
}
//Save Provider
//this.getHibernateTemplate().saveOrUpdate(provider); //Error 1 - So commented this line
//Save Provider with merge
if (provider.getProviderId() > 0) {
this.getHibernateTemplate().merge(provider); //Error 2
} else {
this.getHibernateTemplate().saveOrUpdate(provider);
}
}
エラー1:履歴テーブルが変更される前に正常に動作するために使用 このライン。今、私はこのエラーを取得する:
A different object with the same identifier value was already associated with the session.
はエラー2:
Caused by: org.hibernate.TransientObjectException: object is an unsaved transient instance - save the transient instance before merging: com.abcd.ProviderStatusDetail
いくつかのいずれかがこの問題で私を助けてくださいことができます。私の質問ははっきりしていると思う。本当にありがとう。 )(
session.flush()
session.clear()
を最後にするsaveOrUpdate前: