gpt4 book ai didi

java - 保存实体集合时未找到 PK(错误??)

转载 作者:行者123 更新时间:2023-12-01 11:00:51 25 4
gpt4 key购买 nike

我在创建新对象时出现 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;
}
}

异常(exception):

错误代码:2291调用:INSERT INTO CRM_TASKDEPARTUREADDRESS (TASKID, PERSONADDRESSID) VALUES (?, ?) 绑定(bind) => [3299, 1]引起原因:java.sql.SQLIntegrityConstraintViolationException:ORA-02291:违反完整性约束(DUMMY.FK_CRM_TASKDEPARTUREADDR_TASKI) - 找不到父键

哪里错了?附注在测试对象中无一异常(exception)地保存...

已更新
我发现 INSERT 生成的序列错误
1.插入父类(super class)Task(右)
2.插入CRM_TaskDepartureAddress(错误)
3.插入CRM_TASKDEPARTURE(错误)
2 和 3 必须交换,因为 CRM_TaskDepartureAddress 引用了 CRM_TASKDEPARTURE 。已更新
继承类型.JOINED

最佳答案

您不能将 ManyToOne 作为主键;它指出有许多 TaskVisitAddress 实例引用同一个 TaskVisit,而您的 @Id 需要唯一的东西。

您需要在 TaskVisitAddress 上找到一些可以将其与其他 TaskVisitAddress 实例唯一标识的内容,例如通过排序分配的整数 ID。

@JoinColumn(name = "TASKID")引用任务表中的“TASKID”,因为 JPA 只允许关系引用实体的主键,因此要求首先插入 CRM_TASKDEPARTURE 的约束是不正确的。如果必须保留约束并要求先插入CRM_TASKDEPARTURE,可以尝试在joinColumn中指定表名:

  @JoinColumn(name = "TASKID", referencedColumnName = "CRM_TASKDEPARTURE.TASKID")

如功能请求中所述 https://bugs.eclipse.org/bugs/show_bug.cgi?id=333100

关于java - 保存实体集合时未找到 PK(错误??),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33341490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com