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

使用可选对象进行验证是否会遭到反对?

凌朗
2023-03-14

我有一份肮脏的工作。

阅读-

所以我们将其包装在一个可选对象中并返回它。

创建-

更新-

删除-

这里有一个ID,指定要更新或删除的对象(数据库中的数据行)。

问题是我不确定DB中是否存在具有此id的对象。

我只想在数据库中有ID为的值时执行更新或删除。

如果没有,我使用了一种引发Throw异常的方法。

但这似乎有些不对劲。

>

  • 仅在检查是否有值后销毁查询后返回的可选项。

    但除此之外,我想不出一种方法来知道DB是否真的有值。

    写if==null不是更好吗?

    下面是我实现的代码。

    请建议一个好方法。

    public Optional<CallCounselEntity> getCallCounselByUserId(UUID userId, UUID counselId) {
            return return callCounselRepository.findByUserId(userId, counselId);
        }
    
    
    
    public CallCounselEntity updateCallCounsel(CallCounselEntity callCounsel) {
            **getCallCounselByUserId(callCounsel.getUserId(),callCounsel.getCounselId()).orElseThrow(() -> new NoSuchElementException("No Search Data"));**
            callCounselRepository.save(callCounsel));
    
            return callCounsel;
    }
    
  • 共有1个答案

    邵轶
    2023-03-14

    你所说的“可选被销毁”是什么意思?

    您需要CallCounconSelentity实体=GetCallCounconSelbyUserId(…)。orElseThrow(…) 。如果代码没有抛出,那么该方法将继续,现在将为实体分配一个非可选值,您可以使用该值进行更新。如果代码抛出,那么,好吧,方法中引用实体的任何剩余代码都将永远无法访问。这就是重点。

    因此,总而言之,以下是适用于您的场景的完全有效的代码:

    CallCounselEntity entity = getCallCounselByUserId(...).orElseThrow(...)
    /* perform your update here */
    

    或者,您可以使用:

    getCallCounselByUserId(...).ifPresent(existingCounsel -> { 
        /* perform your update here */ 
    })
    

    getCallCounselByUserId(...).ifPresentOrElse(existingCounsel -> { 
        /* perform your update here */ 
    }, () -> throw new RuntimeException(...))
    

    如果仍要为不存在的实体引发异常。

     类似资料:
    • 我试图用一个自定义验证器将整个设置为无效,这似乎不起作用。。。 下面代码的目标是比较FromGroup的两个实例。 如果它们匹配,则表示未进行任何更改,因此必须无效。 否则它不匹配,这意味着已经进行了更改,所以它必须是有效的 我的变量在我记录时工作正常。它会根据变化变为真或假。 但是我无法使from无效,我已经尝试了很多方法,比如文章和堆栈溢出,这有一个stackblitz,但它似乎也不起作用。

    • 我正在编写一个带有事务回滚的简单json数据库。我需要向一个文件追加一行文本,然后根据追加是否成功,将成功或失败记录到另一个文件。如果需要,第二个文件用于回滚。因此,在继续之前,我需要确定写操作是否成功。 我使用stream.write追加我的文本行,其中包括一个回调,应该验证写操作的成功或失败。 然后我在下面的URL上的NodeJS文档中读到了这个不幸的消息https://nodejs.org/

    • 给定的类值: 我正在尝试使用创建该类的一个新实例: 如果是,我如何使用创建一个新的值对象,在这里我调用的? 谢谢

    • 我是一个新的论坛和Appium/Android自动化,我需要帮助,以验证对象是否存在我的应用程序之前,我采取下一个行动。 信息:[BOOTSTRAP][info]返回结果:{“value”:“未找到元素”,“status”:7} 信息:将命令推送到appium工作队列:[“find”,{“strategy”:“name”,“selector”:“John Doe”,“context”:“”,“mu

    • 那么,我如何使用md5-hash与DirectoryEntry和LDAP进行身份验证呢?!有可能吗?

    • 正如标题所说,我想知道给定的PDF文件是否已经过数字签名。 我用iText签署了它,但我不知道它是否已经签署,以最终辞职或采取其他行动。 有没有简单的方法(可能使用iText)?