我是Hibernate的新手,我一直在努力坚持父实体而不持久化子实体(因为它已经被持久化并且之前已被加载)。
我试图在许多不同的网站上找到一些帮助,但没有运气得到一个明显与我的问题有关的。希望你们能帮忙。
想象一下以下场景:
我有一个引用另一个实体(TableB)的实体(TableA)。
@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",
parameters=@Parameter(value="tableB", name="property"))
private int idb;
@OneToOne
@JoinColumn(name = "idtableb", insertable = false, updatable = false)
private TableB tableB;
//other properties
//constructors
//getters and setters
}
和TableB实体定义如下:
@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
}
我使用TableB实例的引用构造了一个TableA实例。
现在我想将TableA持久化到数据库(表A)并将其链接到表B而不持久化TableB(因为它在先前的事务中持久存在)。为此,我使用以下代码:
Session session = this.sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.persist(TableA);
tx.commit();
session.close();
每次执行上述代码时,在尝试提交事务时都会抛出以下异常:
严重:org.hibernate.TransientObjectException:对象引用一个 未保存的瞬态实例 - 保存之前的瞬态实例 刷新:com.mypackage.TableB
请帮助我理解这个问题? 提前谢谢。
我使用的是Java 8,Hibernate 3.6.8和Spring 4.1.5。