部分填充实体对象并在更新期间保持数据一致

发布于 2024-12-17 17:15:17 字数 145 浏览 2 评论 0原文

我有一个查询,仅将表的部分值提取到实体样式对象中。这些值在图形界面中进行操作。

问题是更新可能会覆盖已修改的任何未使用的值,而不是保持不变。

处理这个问题的正确方法是什么?我应该编写一个进行部分更新的方法还是只是创建一个新的实体对象以进行编辑?

I have a query that only fetches part of a table's values into an entity-style object. These values are being manipulated in a graphical interface.

The issue is that an update could overwrite any unused values that have been modified instead of leaving them untouched.

What is the proper way to deal with this? Should I write a method that does a partial update or simply create a new entity object for the purposes of editing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

救赎№ 2024-12-24 17:15:17

我也很好奇如何最好地处理这个问题。在某些项目中,我可以做出诸如“bean 中的空值意味着该值尚未被触及”之类的假设,我编写了 UPDATE 语句来“更新”所有字段,如果列值不为空,则将列值设置为 bean 的值,否则将列值设置为数据库中预先存在的列值。

UPDATE entity
  SET propertyA = NVL(newPropertyA, propertyA)
     ,propertyB = NVL(newPropertyB, propertyB)
     ,propertyC = NVL(newPropertyC, propertyC)
     ,...

I'm curious as well on how this is best handled. In some projects, where I could make assumptions such as "null values in the bean mean the value has not been touched", I wrote the UPDATE statement to "update" all fields, setting the column value to that of the bean if not null, else setting the column value to the pre-existing column value in the db.

UPDATE entity
  SET propertyA = NVL(newPropertyA, propertyA)
     ,propertyB = NVL(newPropertyB, propertyB)
     ,propertyC = NVL(newPropertyC, propertyC)
     ,...
红墙和绿瓦 2024-12-24 17:15:17

据我从您的标签中了解到,您在项目中使用 ibatis (mybatis)。

因此,您可以在更新映射器中进行其他检查,例如:

<update id="update" parameterType="Client">
    update user 
    <set>
        <if test="Name != null">
            NAME=#{Name},
        </if>
        <if test="First_Name != null">
            FIRST_NAME=#{First_Name}
        </if>
    </set>
</update>

As I understand from your tags you using ibatis (mybatis) in your project.

So you could make additional checks in your update mapper such as:

<update id="update" parameterType="Client">
    update user 
    <set>
        <if test="Name != null">
            NAME=#{Name},
        </if>
        <if test="First_Name != null">
            FIRST_NAME=#{First_Name}
        </if>
    </set>
</update>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文