我是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