具有 OneToOne 关系的 Hibernate - 仅保留父实体
Hibernate with OneToOne relationship - Persist only the parent Entity
我是 Hibernate 的新手,我一直在努力坚持一个父实体而不坚持一个子实体(因为它已经被坚持并且之前已经加载过)。
我试图在许多不同的 Internet 站点上找到一些帮助,但没有找到与我的问题明显相关的帮助。希望大家帮帮忙。
想象一下以下场景:
我有一个引用另一个实体 (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 持久化到数据库 (table A) 并将其 link 持久化到 table B 而不持久化 TableB(因为它在之前的事务中被持久化)。为此,我使用以下代码:
Session session = this.sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.persist(TableA);
tx.commit();
session.close();
每次执行上述代码时,都会在尝试提交事务时抛出以下异常:
Severe: org.hibernate.TransientObjectException: object references an
unsaved transient instance - save the transient instance before
flushing: com.mypackage.TableB
你能帮我理解这里的问题吗?
提前致谢。
我正在使用 Java 8、Hibernate 3.6.8 和 Spring 4.1.5。
我是 Hibernate 的新手,我一直在努力坚持一个父实体而不坚持一个子实体(因为它已经被坚持并且之前已经加载过)。
我试图在许多不同的 Internet 站点上找到一些帮助,但没有找到与我的问题明显相关的帮助。希望大家帮帮忙。
想象一下以下场景:
我有一个引用另一个实体 (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 持久化到数据库 (table A) 并将其 link 持久化到 table B 而不持久化 TableB(因为它在之前的事务中被持久化)。为此,我使用以下代码:
Session session = this.sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.persist(TableA);
tx.commit();
session.close();
每次执行上述代码时,都会在尝试提交事务时抛出以下异常:
Severe: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.mypackage.TableB
你能帮我理解这里的问题吗? 提前致谢。
我正在使用 Java 8、Hibernate 3.6.8 和 Spring 4.1.5。