-1

我正在尝试保存嵌套对象,而我不想保存一个对象。我怎样才能做到这一点?当我运行这个时,我得到了短暂的异常

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

对象

一个

private String field1;   
private String field2;  
@OneToOne(cascade=CascadeType.ALL)  
@JoinColumn(name="field3")  
private 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;  
4

2 回答 2

0

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

  1. 让您的实体图处于您希望它被持久化的状态。这可能意味着将您不想保存的字段设置为空(暂时)。
  2. 保存/坚持。
  3. 恢复被清空的值。如果您处于事务中,您可能希望在恢复不希望保留的值之前分离实体。

像大多数框架一样,当您遵循 hibernate 旨在支持的模式时,hibernate 非常棒。当您尝试做一些“奇怪的”事情时,事情会变得令人毛骨悚然和痛苦。

于 2013-01-25T18:30:46.517 回答
0

当你抛出异常时

“将瞬态实例传递给期望持久实例的 Session 方法”。

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

于 2013-01-25T18:39:54.330 回答