gpt4 book ai didi

java - 如何在Hibernate中更新实体的某些字段?

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:51 24 4
gpt4 key购买 nike

我在 Web 应用程序中使用 Spring 和 Hibernate。我有一个实体如下:

@Entity
public class MyClass{
@Id
@GeneratedValue
protected Long id;

protected String prop1;

protected String prop2;

/*
* Getters And Setters
*/

}

当我想更新该实体的实例时,我使用 jackson 从客户端获取实例,如下所示:

@Inject
SessionFactory sf;

@RequestMapping("update")
@Transactional
public void update(@RequestBody MyClass myClass){
sf.getCurrentSession.update(myClass);
}

用户数据如下:

{
"prop1": "my value1",
"prop2": "my value2"
}

这可以正常工作。我的问题是当我只想更新 prop1 时。在这种状态下,我也必须设置 prop2 。如果我不这样做,它会将 prop2 更新为 null

如何从客户端到服务器只更新prop而不发送prop2

最佳答案

@DynamicUpdate 不会解决您的问题。该注解只是为了性能优化。

如果您只想更新实体的某些属性,可以使用以下一些方法:

  1. 编写 native SQL 查询来更新这些列(字段)。 (不推荐,因为最好尽可能在实体中重用映射)。

  2. 首先从数据库中获取实体,然后更新您想要的字段并保存。 一般不推荐,因为在这种情况下会出现不必要的代码。当这里不需要时,为什么我们必须手动获取实体。但如果有不同的 api 只更新一个字段,例如 update1 api 更新 field1、update2 api 更新 field2、update3 更新 field3,.... updateN api 更新 fieldN,这种方法会比下一种方法更好(就维护代码而言),因为下一种方法需要多个不同的更新查询。但此类需求非常罕见,不推荐此解决方案。

  3. 使用 HQL。类似于“update MyClass mc set mc.prop1=:prop1parameter where mc.id=:idparameter”并适当设置参数。 (推荐)

关于java - 如何在Hibernate中更新实体的某些字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34449693/

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