gpt4 book ai didi

java - Restful Web 服务 - 维护外键

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

我是否误解了 Restful Web 服务的基本概念?我有一个 Android 应用程序,我正在尝试使用 Restful PUT。两个 Mysql 表 Country 和 StateProvince,countryId 是 StateProvince 表上的外键。

如果我尝试使用以下方法对 StateProvince 执行 PUT

<StateProvince><stateName>Victoria</stateName><countryId>1</countryId></StateProvince>

我收到以下错误。我是否误解了有关外键和 Rest 的基本概念?

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseExcepti on
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityCons traintViolationException: Column 'country_id' cannot be null
Error Code: 1048
Call: INSERT INTO state_province (state_id, state_name, country_id) VALUES (?, ?, ?)
bind => [3 parameters bound]
Query: InsertObjectQuery(com.pezoot.models.StateProvince[ stateId=2 ])

最佳答案

简短回答:country_id 为空,因此这看起来像是数据库/持久性问题。您可能没有设置 StateProvince 的国家(或将 StateProvince 添加到国家 - 没有看到您的代码,所以我不知道您是如何映射的)。

长答案:

为什么有一个数据库标识符作为您的 HTTP 请求的一部分出现?

您需要开始考虑 URI 和资源 - 您的 StateProvince 表示应该有某种链接,它与特定 URI(例如 <link rel="country" href="/country/1" /> 和您的资源类中的国家/地区)相关处理 PUT 动词,你需要能够将该 URI 转换为域对象,一个实体(看起来你正在使用 EclipseLink),你可以使用一些 setter 方法或其他方法来建立数据库关系。 < strong>REST 关系和数据库关系根本不同。

需要实践和仔细思考才能处理持久性单元的看似简单的概念(HTTP 措辞)。一些看起来很简单的东西,比如 PUT需要进行重要的处理才能使其像 REST 所期望的那样工作。

在 URI 中使用数据库标识符很诱人,因为它很容易(特别是如果您使用的子资源恰好神奇地知道他们的 parent 是谁:例如 country/1/stateprovince/2)但您必须退后一步并询问你自己,是 country/1 还是 country/usa - 你还必须问自己,国家和州/省真的是一个实体吗?或者它只是一个值(value)对象?您真的打算完整地 PUT 一个州/省吗?

关于java - Restful Web 服务 - 维护外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392802/

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