【发布时间】:2012-02-20 10:11:38
【问题描述】:
@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;
}
请问这个效果需要哪种级联类型?
【问题讨论】:
-
两个实体的 ID 生成一切正常吗?
-
在保存之前没有,但是孩子(人)没有被保存,只是尝试了 ALL 而不是 persist 并且有效......所以我认为它可能是需要 ALL 的 onetoone 映射,而不是坚持下去。但我很可能是错的......
-
docs.jboss.org/hibernate/annotations/3.5/reference/en/… 试试
{PERSIST, MERGE} -
@NimChimpsky - 你需要 CascadeType.MERGE(除了你已经拥有的 CascadeType.PERSIST)。狼吞虎咽!比 TC1 领先一分钟。