-1

ネストされたオブジェクトを保存しようとしていますが、ネストされたオブジェクトのうち、1 つのオブジェクトを保存したくありません。どうすればこれを達成できますか? これを実行していると、一時的な例外が発生します

org.hibernate.TransientObjectException: object references an unsaved transient instance.

私は、休止状態で推奨されていない愚かなことをしていることを知っています。

シナリオ:

A, B, C, D are four different tables.

Table A  ( field1, field2 , field3[fk to table B])   
Table B  ( field3, field4 , field5 [fk to table C])   
Table C  ( field5, field7 , field8)  
Table D  ( field6, field9 , field3[fk to table B]) 

オブジェクト

private String field1;   
private String field2;  
@OneToOne(cascade=CascadeType.ALL)  
@JoinColumn(name="field3")  
private B b;

B

private String field3;  
private String field4;    
//Want to save D  
@OneToOne(cascade=CascadeType.ALL)  
@JoinColumn(name="field3")    
private List<D> d;         // This is a list of D  
//Dont want to save C  
@OneToOne  
@JoinColumn(name="field5")  
private C c;  

private String field5;  
private String field7;     
private String field8;  

D

private String field6;  
private String field9;     
private String field3;  
4

2 に答える 2

0

次の場合に例外がスローされます

「永続インスタンスを期待する Session メソッドに一時インスタンスを渡します」。

一時インスタンスをベイクする場合は、その一時インスタンスを保存メソッドに渡す前に参照をロードしたことを確認してください。他の一時的なインスタンスへの参照を持たないオブジェクトを最初に保存する永続的な参照がない場合。

于 2013-01-25T18:39:54.330 に答える
0

なぜこれをやりたいのかは私には明らかではありませんが、できると思います。

  1. 永続化したい状態のエンティティ グラフを取得します。これはおそらく、保存したくないフィールドを (一時的に) null に設定することを意味します。
  2. 保存/持続します。
  3. 無効化された値を復元します。トランザクション中の場合、保持したくない値を復元する前に、エンティティをデタッチすることができます。

ほとんどのフレームワークと同様に、休止状態がサポートするように設計されたパターンに従っている場合、休止状態は素晴らしいものです。「奇妙な」ことをしようとすると、物事が不気味で苦痛になることがあります。

于 2013-01-25T18:30:46.517 に答える