当前位置: 首页 > 知识库问答 >
问题:

JOOq稀疏更新

麻桐
2023-03-14

我正在使用Jax-RS和Jooq。我想知道如何使用稀疏数据实现REST补丁。

比如说我有一些PoJo。我得到了一个JSON补丁(http://www.restapitutorial.com/lessons/httpmethods.html)请求的对象不完整,只包含应该更改的字段。

我该如何编写这样的处理程序?

我试着接受真实的Pojo对象。我的第一个想法是“如果一个字段为空,我就不更新它”。这是我的第一个问题。

public Resource update(@PathParam("id") UUID id, Resource resource) {
    ResourceRecord record = dslContext.newRecord(RESOURCE, resource);
    dslContext.update(RESOURCE).set(resource).where(RESOURCE.ID.eq(id)).execute();

    // or

    memberDao.update(member);

    return resourceDao.findById(id);
}

在尝试和在线搜索时,我想“故意将某个设置为null怎么样?”。因此,它必须取决于请求中字段的存在。

我最后的想法是:

public Resource update(@PathParam("id") UUID id, Map<String, Object> changes) {
    dslContext.update(RESOURCE).set(changes).where(RESOURCE.ID.eq(id)).execute();
    return resourceDao.findById(id);
}

当然,这是行不通的

但是我有点卡住了,网上充满了不同问题的答案,但是我没有发现有人尝试同样的事情。

在我的脑海里,我在玩反射和循环,感觉有点可怕。我想知道如何尽可能简单地编写代码。

共有1个答案

訾稳
2023-03-14

我试着接受真实的Pojo对象。我的第一个想法是“如果一个字段为空,我就不更新它”。这是我的第一个问题。

jOOQ不是这样工作的。这里的这篇博客文章描述了其基本原理。具体来说,您的特定代码行如下:

ResourceRecord record = dslContext.newRecord(RESOURCE, resource);

将所有的ResourceRecord.changed()标志设置为true,无论它们是否为null(因此,无论它们的值是否通过从POJO设置它们而被修改)。就REST而言,这对应于PUT,远远超过PATCH

这样更好:

public Resource update(@PathParam("id") UUID id, Map<String, Object> changes) {
    dslContext.update(RESOURCE)
              .set(translate(RESOURCE, changes))
              .where(RESOURCE.ID.eq(id))
              .execute();
    return resourceDao.findById(id);
}

您将需要一个转换()函数来翻译您的Map

这应该是开箱即用的,当然,当前的API与其余的API不一致。修复正在进行中:https://github.com/jOOQ/jOOQ/issues/6388

同时,您可以将映射传递到DSLContext。newRecord(表,对象),它将调用记录。fromMap()内部

 类似资料:
  • 请看示例代码(注意 data 的数组下标): -- http://www.kyne.com.au/~mark/software/lua-cjson.php -- version: 2.1 devel local json = require("cjson") local data = {1, 2} data[1000] = 99 -- ... do the other things ngx.

  • 问题内容: 也就是说,如果我将当前时间用作数组的索引: 解释器将实例化从0到现在的所有元素吗?不同的浏览器会做不同的事情吗? 我记得AIX内核中曾经存在一个错误,该错误会在请求时创建伪tty,但是如果您说“ echo> / dev / pty10000000000”,它将创建/ dev / pty0,/ dev / pty1, ....然后跌倒死亡。在贸易展览会上这很有趣,但是我不希望这种情况发生

  • 我正在网上寻找稀疏图的好定义,但我很困惑。稀疏图实际上是一个具有数百万/数十亿节点的大图吗?一个例子是现实世界的一个——比如Facebook。或者它们也可以在小型网络中? 提前感谢!

  • 稀疏矩阵(Sparse Matrix) 注:压缩存储的矩阵可以分为特殊矩阵和稀疏矩阵。对于那些具有相同元素或零元素在矩阵中分布具有一定规律的矩阵,被称之为特殊矩阵。对于那些零元素数据远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称之为稀疏矩阵。 1. 稀疏矩阵的概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目时,则称该矩阵为稀疏矩阵。与之相反,若非0元素数目占大多数时,则称该矩阵

  • 问题内容: 我想将文件从一个地方复制到另一个地方,问题是我处理了很多稀疏文件。 有什么(简单的)复制稀疏文件而不会在目标位置变得庞大的方法? 我的基本代码: 问题答案: 一些背景理论 请注意,通过管道传输原始字节–一旦您认为将原始数据通过管道从到提供和的,就可以理解。这样,绝对可以处理提供字节的任何源以及使用它们的任何接收器。 另一方面,文件中漏洞的位置是“侧通道”信息,这些“侧通道”信息是“经典

  • 问题内容: 我得到了一个1TB的稀疏文件,在Linux上实际上存储了32MB数据。 是否可以“有效地”制作一个软件包来存储稀疏文件?该软件包应解压缩为另一台计算机上的1TB稀疏文件。理想情况下,“软件包”应为32MB左右。 注意:可能的解决方案是使用“ tar”:https : //wiki.archlinux.org/index.php/Sparse_file#Archiving_with_.6