JPA onetoMany/ManytoOne 持续存在 - 违反完整性约束 - 找不到父键

2023-12-26

我的映射文件(相关数据):

Parent:

@Entity
@Table(name = "ATTRIBUTE_NAME", uniqueConstraints = @UniqueConstraint(columnNames = "NAME_TEXT"))
@SequenceGenerator(name="ATTRIBUTE_NAME_SEQ",    sequenceName="ATTRIBUTE_NAME_SEQ", initialValue = 1, allocationSize = 1)
public class AttributeNameVo implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE,    generator="ATTRIBUTE_NAME_SEQ")
    @Column(name = "ATTRIBUTE_ID", unique = true, nullable = false, precision = 6, scale = 0)
    private int attributeId;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "attributeNameVo")
    private Set<AttributeFunctionalUsageVo> attributeFunctionalUsageVos = new HashSet<AttributeFunctionalUsageVo>(0);

Child:

@Entity
@Table(name = "ATTRIBUTE_FUNCTIONAL_USAGE")
public class AttributeFunctionalUsageVo implements Serializable {

        @EmbeddedId
        @AttributeOverrides({@AttributeOverride(name = "attributeId", column = @Column(name = "ATTRIBUTE_ID", nullable = false, precision = 6, scale = 0) ),
                             @AttributeOverride(name = "functionalAreaCd", column = @Column(name = "FUNCTIONAL_AREA_CD", nullable = false, length = 5) ) })
        private AttributeFunctionalUsageIdVo id;

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "attributeId", referencedColumnName="ATTRIBUTE_ID", nullable = true, insertable = false, updatable = false)
        private AttributeNameVo attributeNameVo;

然后我用代码(伪代码)来做:

  AttributeNameVo attr = new AttributeNameVo();
  AttributeFunctionalUsageVo attrFunc = new AttributeFunctionalUsageVo();
  attr.getAttributeFunctionalUsageVos().add(attrFunc);
  attrFunc.setAttributeNameVo(attr);

在 DAO 中:

  em().persist(attr);

日志结果显示:

select ATTRIBUTE_NAME_SEQ.nextval from dual

insert into ATTRIBUTE_NAME (ACTIVE_FL, DATE_CREATED, DATE_MODIFIED,  DISPLAY_SEQ_NO, EXTERNAL_REF_ID, HINT_TEXT, LOV_FL, MAX_LENGTH, MAX_RANGE, MIN_RANGE, NAME_TEXT, POS_FL, PUBLIC_FL, RAPID_SEARCH_FL, REQUIRED_FL, TYPE_CD, USER_CREATED, USER_MODIFIED, ATTRIBUTE_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

insert into ATTRIBUTE_FUNCTIONAL_USAGE (DATE_CHANGED, DATE_CREATED, DATE_MODIFIED, USER_CREATED, USER_MODIFIED, ATTRIBUTE_ID, FUNCTIONAL_AREA_CD) values (?, ?, ?, ?, ?, ?, ?)

然后就报错了:

ORA-02291: integrity constraint (ATTR_FUNCTIONAL_USAGE_ATTRB_FK) violated - parent key not found

希望能帮助解决此问题。我已经尝试了很多事情,但仍然一无所获......

根据评论中的问题,可嵌入 id 的实体映射是:

public class AttributeFunctionalUsageIdVo implements Serializable {

@Column(name = "ATTRIBUTE_ID", nullable = false, precision = 6, scale = 0)
private int attributeId;

您的解决方案是必需的,因为您已将 AttributeFunctionalUsageVo 中的 attributeNameVo 映射设置为只读(insertable = false,updatable = false),因此 JPA 需要检查可嵌入 ID 中“attributeId”字段的其他映射以设置其值。如果您不使用值手动更新该字段,则插入发生时该字段将为空,这就是失败的原因。

根据您使用的 JPA 版本,有许多选项。如果必须使用 JPA 1.0,则可以修改映射,使 attributeNameVo 可写,而 embeddable 中的映射为只读(切换两个映射上的可插入、可更新设置)。然后,JPA 将从关系中提取“attributeId”字段,忽略对嵌入 ID 字段的任何更改。这将导致它为空,除非您刷新或以其他方式从数据库重新加载实体。

JPA 2.0引入了其他选项,例如允许将关系标记为ID,甚至声明连接字段映射到 ID https://docs.oracle.com/javaee/6/api/javax/persistence/MapsId.html场地。然后您将使用:

@ManyToOne(fetch = FetchType.LAZY)
@MapsId("attributeId")
private AttributeNameVo attributeNameVo;

其中“attributeId”是嵌入式 ID 内映射的名称。然后,JPA 将使用 AttributeNameVo 的主键为您设置嵌入 ID 中的 attributeId 值,并正确处理插入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA onetoMany/ManytoOne 持续存在 - 违反完整性约束 - 找不到父键 的相关文章

随机推荐

  • 如何在 Rust 中正确包装 C 函数指针? [复制]

    这个问题在这里已经有答案了 我有一个 C 结构体Foo带有函数指针 在我的 Rust 绑定中 我希望允许用户设置此函数指针 但我希望避免用户必须处理 FFI 类型 foo h struct Foo void internal uint8 t
  • NSTextView 的 insertText 方法在 OS X v10.11 中已弃用。替代品是什么?

    我在 AppKit API 参考中看到insertTextOS X v10 11 中已弃用该方法 我应该用什么来代替 文档说 void insertText id aString 该方法是用户输入文本的方法NSTextView 请参阅NSI
  • 对 UITextView 应用字数限制

    如何在 Objective C interface builder 中对 UITextView 应用字数限制 我已经搜索了一段时间 发现了字符数 但没有找到字数 有谁能给我指点一下吗 您可以只计算空格数并对其进行限制 这是一个 hack 但
  • 如何在 WP7 上挂钩硬件搜索按钮

    我有一个带有搜索页面的 WP7 应用程序 我更愿意挂钩硬件搜索按钮 而不是必须将搜索图标添加到菜单栏 有谁知道如何做到这一点 当前版本中的第三方应用程序无法使用硬件搜索按钮 请参考此线程已回答类似问题 https stackoverflow
  • PPP 或以太网如何从错误中恢复?

    查看数据链路级标准 例如 PPP通用帧格式 http www tcpipguide com free t PPPGeneralFrameFormat htm or Ethernet http en wikipedia org wiki Et
  • @Input 属性的可观察值

    我从带有复选框输入的数组中选择了一些值 如本例所示 Visit http plnkr co edit N9NXBYcwhon6ITr8RP5y p preview 但我想使用输入装饰器将检查的数组数据传递给另一个组件 如何使已检查的数据成为
  • 具有不完整链的 SSL 证书通过了 .NET Core 2.2 中的验证

    使用 NET Core 2 2 我需要重新创建不完整链 SSL 错误 但是 ServerCertificateValidationCallback 为我提供了与我预期不同的证书链 并且这些证书通过了验证 有人可以解释这里出了什么问题吗 调用
  • 从页面或应用程序发布到 Facebook 用户的留言墙上

    我可以让用户授权我的应用程序 然后我可以使用以下代码在他们的墙上发布 new Facebook facebook gt api uid feed post array message gt My app says hi 这可行 但出现在用户
  • 如何在 azure 函数中访问 http 请求的所有字段(在 C# 中解析 JSON)?

    microsoft azure 对我来说是一个全新的编程主题 编程基础语言是C 我必须使用逻辑应用程序中的 Azure Funtion Http 触发器 当新电子邮件到达时 我将日志应用程序中收到的电子邮件中的所有可能数据提供给 到天蓝色的
  • Kubernetes 持久卷访问模式:ReadWriteOnce、ReadOnlyMany 和 ReadWriteMany

    据这位官员介绍document https kubernetes io docs concepts storage persistent volumes access modes Kubernetes持久卷支持三种类型的访问模式 只读很多
  • 在 Pandas 中使用 ELIF 创建列

    Question 我无法弄清楚如何根据其他两列中的值创建新的 DataFrame 列 我需要使用 if elif else 逻辑 但我找到的所有文档和示例都只显示 if else 逻辑 这是我正在尝试做的事情的示例 Code df comb
  • TSQL - 选择插入的行

    有没有办法选择插入的行 我正在尝试使用运行以下查询SqlCommand 它用于在数据库中保留给定的id INSERT INTO tbl id SELECT COUNT 1 AS id from tbl 有没有办法返回插入的 id 列 以便我
  • 需要 sigsuspend 的解释

    我需要对 sigsuspend 主题进行澄清 我有一个简化的例子 sigset t mask oldmask sigemptyset mask sigaddset mask SIGRTMIN 1 sigprocmask SIG BLOCK
  • 如何恢复/重新创建 mysql 的默认“mysql”数据库

    当我安装mysql时 它附带了两个数据库 mysql和信息模式 我不小心删除了mysql数据库 有什么办法可以重新创建它吗 另外 由于它包含一个包含用户信息的表 是否有什么方法可以在没有它的情况下查看用户信息 如果您仍然能够登录 我假设您不
  • Facebook API 错误子代码 33

    我有一个应用程序可以获取leads当潜在客户填写表单时 在 webhook 请求后来自 facebook 某些页面抛出此错误 error message Unsupported get request Object with ID 2333
  • 通过react获取cookie

    我需要知道我的用户是否已连接 为此 我想读取我在服务器端使用express session设置的cookie app use session secret crypted key resave false saveUninitialized
  • 为什么用分号连接多个 MySQL 查询不能与 Perl DBI 一起使用?

    我想使用将值插入到两个单独的 MySQL 表中DBI https metacpan org pod DBI 我尝试将两个工作结合起来INSERT通过插入一个来查询 它们之间 dbh gt do q INSERT INTO testA tes
  • 在 docker 中运行 npm update,而不使用该特定更新的缓存

    背景 我正在编写代码node js using npm and docker 我试图让我的 docker 文件在构建时使用缓存 这样就不会花费太长时间 我们有一个 通用 存储库 用于保存在各种存储库中使用的逻辑 并且通过 npm 包进行传播
  • 使用 OpenMP 并行化 while 循环

    我有一个非常大的数据文件 这个数据文件中的每条记录有4行 我编写了一个非常简单的 C 程序来分析这种类型的文件并打印出一些有用的信息 该程序的基本思想是这样的 int main char buffer BUFFER SIZE while f
  • JPA onetoMany/ManytoOne 持续存在 - 违反完整性约束 - 找不到父键

    我的映射文件 相关数据 Parent Entity Table name ATTRIBUTE NAME uniqueConstraints UniqueConstraint columnNames NAME TEXT SequenceGen