ajax调用时如何将外键传递给json数据?

Posted

技术标签:

【中文标题】ajax调用时如何将外键传递给json数据?【英文标题】:How to pass foreign key to json data when doing ajax call? 【发布时间】:2015-12-15 18:31:50 【问题描述】:

我在使用 ajax 将数据发布到另一个表中包含外键的表时遇到了一些困惑。我可以通过 spring pojo 的对象绑定来做到这一点,但我正在尝试创建一个程序,纯粹以 JSON 格式处理客户端和服务器端数据传输。

例如,StudentGrade 表之间存在一对多关系。成绩表中的外键是student_id

现在,如果我尝试在学生 id = 1 的grade 表中插入。json 数据应该是什么样的?

假设成绩表包含这三列:

grade_Id, grade_received, student_id_fk

如果没有外键,我可以像这样传递 json 数据:


    "grade_Id": 2,
    "grade_received": "A"

如果我需要 json 数据包含student_id_fk,我需要更改什么?

【问题讨论】:

无法理解您的问题,为什么您不能在 JSON 中使用“student_id_fk”键值对?? 如果我错了,@hagrawal 纠正我。在我的Grade 实体中,@ManyToOne 注释位于private Student student; 变量之上。所以我的 pojo 中并没有真正的 student_id_fk 变量。 但是在插入时你需要知道并传递作为学生表中主键的学生 id 值。它不像触发器可以基于某事做某事,这是你的核心信息需要..唯一的问题是学生表中应该存在学生ID,同时插入成绩表..但是你需要学生ID..所以成绩对象的学生对象将有学生ID..但是从客户端你需要传递学生 id .. 这无论如何都会发生,因为大概你没有在你的 Grade 对象/JSON 中传递 NULL 学生 .. 看看我更新的评论.. @hagrawal 是的,在进行 ajax 调用时,student_id 将可用。所以你说我在 json 数据中传递了 student_id_fk,并使用 id 来获取 Student 对象java端? 【参考方案1】:

我通过在我的Grade.java 类中添加一个新的私有变量解决了这个问题。我创建了private Integer studentId,并用@Transient注释了它,这样hibernate就不会持久化它。

然后使用studentId变量获取Student对象。

【讨论】:

【参考方案2】:

这样的 JSON 对象将提供足够的信息来在服务器上执行插入操作:

   
        "student_id": 1,
        "grade_received": "A"
    

SQL 在服务器上类似于INSERT INTO Grades (student_id_fk, grade_received) VALUES(1, 'A')

【讨论】:

插入就够了,但是不会更新PK-FK关系列。在我的例子中,Grade 表中的student_id_fk 列将为空 您编辑的答案仍然无效,Grade.java 类中没有student_id_fk。在java端做的FK-PK映射不只是使用id,而是使用object。 您在 OP 中提供的有关服务器如何完成的相关信息非常少。也许更新你的OP?另一个帖子指出,另一种方法是使用 AJAX 请求提供的 Id 获取 Student 对象,并在您的 Grade 对象上设置 Student 我添加了标签以包含hibernate

以上是关于ajax调用时如何将外键传递给json数据?的主要内容,如果未能解决你的问题,请参考以下文章

将外键传递给 Rails 中的部分渲染

通过 post 将外键的 id 传递给表单

如何将外键从一个视图传递到另一个视图?

如何在 Spring 中从将外键作为长属性引用的 json 创建模型?

json数据提取并使用ajax调用传递给C#

使用 pg-promise 格式化 JSON 输出,将外键封装为对象