我是Hibernate的新手,我一直在努力堅持一個父實體,而不需要堅持一個子實體(因爲它已經存在並且之前已經加載)。Hibernate與OneToOne的關係 - 只保留父實體
我試圖在許多不同的互聯網網站上找到一些幫助,但沒有得到一個明確與我的問題有關的運氣。希望你們能幫忙。
試想以下情形:
我有一個實體(表A)引用其他實體(表B)。
@Entity
@Table(name = "A")
public class TableA implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name="idtablea")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@GeneratedValue(generator="IdBGenerator")
@GenericGenerator(name="IdBGenerator", strategy="foreign",
[email protected](value="tableB", name="property"))
private int idb;
@OneToOne
@JoinColumn(name = "idtableb", insertable = false, updatable = false)
private TableB tableB;
//other properties
//constructors
//getters and setters
}
和表B實體定義如下:
@Entity
@Table(name = "B")
public class TableB implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "idtableb")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
//other properties
//constructors
//getters and setters
}
我構建表A的實例與表B的一個實例的基準。
現在,我想將TableA保存到數據庫(表A)並將其鏈接到表B,而無需保留TableB(因爲它在先前的事務中保留)。爲此,我現在用的是下面的代碼:
嚴重:org.hibernate.TransientObjectException:對象引用
Session session = this.sessionFactory.openSession(); Transaction tx = session.beginTransaction(); session.persist(TableA); tx.commit(); session.close();
每次試圖提交事務時執行上面的代碼後拋出以下異常一個 未保存的瞬態的實例 - 前 沖洗保存瞬態的實例:com.mypackage.TableB
能不能請幫助我理解的問題 這裏? 在此先感謝。
我使用Java 8,Hibernate 3.6.8和Spring 4.1.5。
謝謝Shailendra。你是對的。我正在創建一個新的對象,而不是加載它。從數據庫加載實體後,我設法堅持父實體。 – 2015-03-25 10:59:23