【发布时间】:2015-10-26 08:36:51
【问题描述】:
我在创建新对象时遇到 ORA-02291 (entitymanager.persist(taskVisit))
@Entity(name = "CRM_TASKDEPARTURE")
@Access(AccessType.PROPERTY)
@DiscriminatorValue(value = TaskType.Consts.VISIT_ID)
public class TaskVisit extends Task {
private static final long serialVersionUID = 1L;
private List<TaskVisitAddress> addresses = new ArrayList();
public TaskVisit() { }
@OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.PERSIST,mappedBy = "taskVisit")
public List<TaskVisitAddress> getAddresses() {
return addresses;
}
}
约束是 CRM_TaskVisitAddress(TASKID)
实体代码:
@Entity(name = "CRM_TaskDepartureAddress")
public class TaskVisitAddress implements Serializable {
...any fields
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TASKID")
public TaskVisit getTaskVisit() {
return taskVisit;
}
@Id
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PERSONADDRESSID")
public PersonAddress getPersonAddress() {
return personAddress;
}
}
例外:
错误代码:2291 调用:INSERT INTO CRM_TASKDEPARTUREADDRESS (TASKID, PERSONADDRESSID) VALUES (?, ?) 绑定 => [3299, 1] 原因:java.sql.SQLIntegrityConstraintViolationException: ORA-02291: 违反完整性约束 (DUMMY.FK_CRM_TASKDEPARTUREADDR_TASKI) - 未找到父键
错在哪里? 附:在测试对象中无一例外地保存...
更新
我发现错误的 INSERT 生成序列
1.插入超类Task(右)
2. 插入 CRM_TaskDepartureAddress(错误)
3.插入CRM_TASKDEPARTURE(错误)
№ 2 和 3 必须交换,因为 CRM_TaskDepartureAddress 引用了 CRM_TASKDEPARTURE 。
更新
InheritanceType.JOINED
【问题讨论】:
-
为什么不分享完整的异常、堆栈跟踪以及“ORA-blahblah”的含义?
-
这是单表还是联表继承?
标签: java jpa orm eclipselink