【问题标题】:INSERT in a ONE to ONE Relationship在一对一关系中插入
【发布时间】:2014-07-12 10:49:17
【问题描述】:

如何以一对一的关系插入记录?

假设我有 3 个表:表 A、表 B、表 C

我必须在表 A 被引用为主键的表中插入一条记录。

让我们这样说:

tableB.PK = tableA.PK
tableC.PK = tableA.PK

现在,

当我在 tableB 或 tableC 中插入记录时,会发生错误:

Error Message: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_tableB_tableA"

但是当我在作为两个表主键的基础的 tableA 中插入时,它是可以的,它会增加。

如何插入记录?特别是在 JPA 中。

  1. 是否需要先插入tableA再插入其他? (只是这样做了,但它不起作用)
  2. 是否需要同时在表中插入数据? (如何?在 JPA 中会很好)

【问题讨论】:

  • 由于您在 tableB 和 tableC 中有对 tableA 的引用,因此您必须先插入 tableA 并检索生成的 PK。然后,您可以使用检索到的 ID 插入任何其他表。对于 JPA,请看这里:stackoverflow.com/questions/9649515/…
  • @deterministicFail:这更像是一个答案而不是评论
  • 哦,我明白了,我需要检索生成的 PK 以进行有效插入。该链接虽然有帮助。谢谢。但是为什么我试图直接插入数据库,而我在插入 tableA 后插入 tableB 时出现错误,尽管我将 ID 号放在 tableA 中存在的 tableB 中?
  • 如果没有您的来源,我只能假设您正在处理事务并尝试插入不同的会话上下文。或者你简单地使用了错误的 id
  • 我在 JPA 中得到它,它必须在事务中。但是在sql server中怎么样。只是好奇。我在 tableB.PK 中手动输入 1,其中 tableA.PK 有 1。它发生错误即使我输入正确的 ID,我也无法在 tableB 中输入记录。

标签: sql sql-server database jpa


【解决方案1】:

这里又是我的评论作为答案

由于您在 tableB 和 tableC 中有对 tableA 的引用,因此您必须先插入 tableA 并检索生成的 PK。然后,您可以使用检索到的 ID 插入任何其他表。对于 JPA,请看这里:How to get Id of last persisted entity using JPA

下面是一个如何在 sql server 中实现这一点的示例: http://sqlfiddle.com/#!3/a3f62/3

这是关系数据库和外键的基础知识,我没有阅读 wiki 文章,但它不得不提到同样的想法:http://en.wikipedia.org/wiki/Foreign_key

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2015-03-16
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多