【发布时间】:2015-03-25 09:50:37
【问题描述】:
我是 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。
【问题讨论】:
标签: spring hibernate jpa one-to-one hibernate-annotations