Symfony,而不是Doctrine,通过将@Version注解添加到实体的属性来提供乐观锁定。实际上,用户实体上的版本属性将如下所示:
/**
* @Groups({
* "user:item:get"
* })
* @ORM\Version
* @ORM\Column(type="integer")
*/
private $version;
@Groups-Annotation中的user:item:getGroup会将version-property的值添加到GET请求的响应中。没有任何请求的直接实现,我们使用利用内部提供者/持久性系统的实体的CRUD-API。
让我们假设我们将要更改的User-Resource上的当前版本是10。
在具有如下主体的资源上执行PUT请求:
{
"zip": 10000
"version": 5
}
将完全有效。即使版本号不匹配,zip属性也将更改为10000。
我做错了什么?是内部持久化系统无法自己验证版本号,还是我提供的版本号不正确-它不应该在请求主体中?
谢谢你!
1条答案
按热度按时间xzv2uavs1#
好的,我将api平台升级到了3.0.0版,现在它可以正常工作了...
如果您使用PHP属性作为注解,版本字段应该如下所示:
其中,user:item:get在GET请求中公开该属性,user:item:put在PUT请求中公开该属性。这样,内部持久系统就可以验证请求体中传递的版本。因此,我可能不必升级,而只需将user:item:putGroup添加到@Groups注解中即可。
另一个问题仍然存在,但这是当前已知的问题。发送正文中没有version-property的PUT-Request不会引发OptimisticLockException,请求将顺利通过而不会出错。