Hibernate嵌套对象

时间:2013-01-25 18:01:46

标签: java hibernate exception persistence

我正在尝试保存嵌套对象,而不是那些嵌套对象,我不想保存一个对象。我怎样才能实现这一目标? 当我运行这个时,我得到了暂时的异常

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

我知道我正在做一些愚蠢的事情,这是hibernate不推荐的。

场景:

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]) 

物件

A

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;  

C

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

D

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

2 个答案:

答案 0 :(得分:0)

我不清楚你为什么要这样做,但我认为可以做到。

  1. 将您的实体图表保留在您希望其持久化的状态。这可能意味着将您不想保存的字段设置为空(暂时)。
  2. 保存/持续。
  3. 恢复已淘汰的值。如果您在事务中,则可能需要在恢复不希望持久存储的值之前分离实体。
  4. 与大多数框架一样,当您遵循hibernate旨在支持的模式时,hibernate非常棒。当你尝试做一些“奇怪的事情”时,事情会变得令人毛骨悚然和痛苦。

答案 1 :(得分:0)

时抛出异常
  

&#34;将瞬态实例传递给期望a的Session方法   持久性实例&#34;。

烘焙瞬态实例确保在将该瞬态实例传递给save方法之前已加载了引用。如果您没有持久性引用,则首先保存不会引用其他瞬态实例的对象。