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
格式处理客户端和服务器端数据传输。
例如,Student
和 Grade
表之间存在一对多关系。成绩表中的外键是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数据?的主要内容,如果未能解决你的问题,请参考以下文章