我正在使用Hibernate 4.2.6,JSF2(Mojarra 2.1.13)和Tomcat 7.0.34来开发我的Web应用程序。我正在尝试使用Hibernate注释在两个类之间定义OneToOne关系。我认为我做错了,因为我得到了一个 ORA-02291异常:违反了完整性约束(PER_VPT_F01) - 未找到父密钥。 我花了近8个小时的时间试图找到错误的地方而没有任何成功。请有人看一下这段代码,告诉我是否犯了错误(四只眼睛可以看到两个以上)。
首先是我的父类:
@Entity
@Table(name = "GEN_MIEMBROS")
public class Miembro implements Serializable, Comparable {
@Id
@SequenceGenerator(name = "seq", sequenceName = "GEN_SEQ")
@GeneratedValue(generator = "seq")
@Column(name = "ID_MIEMBRO")
private long idMiembro;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "CODIGO")
private Lista lista;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "detail")
private Vpt vpt;
// more fields definitions
// Constructors and getters & setters
}
现在,孩子班:
@Entity
@Table(name = "PER_VPT")
public class Vpt implements Serializable {
@Id
@Column(name = "ID_VPT")
@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "detail"))
@GeneratedValue(generator = "generator")
private long idVpt;
@OneToOne
@PrimaryKeyJoinColumn
private Miembro detail;
// more fields definitions
// Constructors and getters & setters
}
我必须说当我尝试插入新子项时,父行已经存在。实际上,我从父表中获取子项的ID。问题是,当我尝试提交插入操作时,我得到一个ORA-02291异常。如下图所示,saveOrUpdate()操作先前设置了idVpt字段的值。
还有一件事。抛出异常的约束如下所示:
CONSTRAINT PER_VPT_F01
FOREIGN KEY (ID_VPT)
REFERENCES GEN_MIEMBROS (ID_MIEMBRO) ON DELETE CASCADE
提前致谢。
答案 0 :(得分:1)
将评论标记为答案,因为它解决了OP的问题
禁用与表关联的所有触发器。这应该工作正常。通常它会在触发器中发生,它会尝试另一次插入/更新