@Entity
@Table(name = "parent")
public final class Parent extends Base {
@OneToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
private Person person;
并(除其他事项外)这样做:
Parent parent = new Parent();
Person person = new Person();
parent.setPerson(person);
session.save(parent);
我得到提到的异常?
我需要手动调用session.save(person)吗?我必须在孩子的类定义中添加级联类型注释(它引用父类的地方)吗?
还是我错过了其他明显的东西?
我不想使用CascadeType.ALL,因为当删除父对象时,我想保留此人(孩子)。
两个实体/表都扩展了一个公共基表:
@MappedSuperclass()
public abstract class Base {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
public Integer getId() {
return id;
}
这会影响需要哪种级联类型?
您没有提到Hibernate版本,但是自从我开始使用它以来,它并没有改变。
正如你在读Hibernate参考,以获得Java标准SAVE_UPDATE
,你需要{CascadeType.PERSIST, CascadeType.MERGE}
在Hibernate中。
编辑:看到更新的信息,您现在正在做的事情会使Hibernate将其视为双向的一对一映射。这基本上意味着,对于这两个表中的任何一个,每个对象在另一个表中
都必须有 一个具有相同ID的对象。因此,您不能仅删除其中之一,否则会丢失FK完整性。
如果您希望它是单向映射,例如,如果您希望能够删除此人却离开父母,则必须指定FK,通常通过来指定@JoinColumn
,例如
@JoinColumn(name="PERSON_ID", unique=false, nullable=true, insertable=true, updatable=true)
我正在使用Seam Framework。我有2个实体: Request.java 和请求事件.java 当我进行此交易时: 我得到了这个错误:
错误: 我还尝试了,但是 病因是什么?显然,我设置了nullable=true(在数据库中也是如此),尽管我有这个错误。有什么想法吗?
问题内容: 我已经为我的问题找到了一些很好的答案,但这是关于从Hibernate 3.4.0GA升级到Hibernate 4.1.8的问题。因此,这在以前的版本中一直有效,我一直在高低搜寻其在新版本中的重要性。 我得到一个 org.hibernate.TransientObjectException:对象引用了一个未保存的瞬态实例- 在刷新之前保存该瞬态实例:com.test.server.dom
我真的很难解释为什么JPA不把我的@manytomy关系串联起来。我找到的所有答案都与缺少的cascade语句有关。但我确实有,而且仍然有: 原因:org.hibernate.瞬态对象异常:对象引用未保存的瞬态实例-在刷新之前保存瞬态实例:com.example.iaa.model.员工 代码基于本教程:https://hellokoding.com/jpa-many-to-many-relati
我有两个例子。一个是项目,一个是模块。< code >一对多关系。 我将模块设置到项目中。然后使用。第一次,因为数据库中没有记录,所以项目和模块可以保存到数据库中。然而,第二次,因为我不需要创建新项目,我只创建新模块,然后将模块设置回项目。 发生异常。 对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。 有什么办法可以解决这个问题吗谢谢
上图显示了表之间的关系。 AddressType表包含静态值,如mailing、home、work等。 在AddressTypeRel模型类中,我有一个带有多对一注释的AddressType对象