【发布时间】:2019-05-12 17:11:33
【问题描述】:
我想通过将该实体的“不完整”实例交给JpaRepository 来更新现有实体。不完整的意思是只设置了我想要更改的值,其他值是null。现在,如果我这样做,所有null 值也将保存为null,因此会覆盖我想要保留的值。
我考虑过先从数据库中加载实体,然后以某种方式将更改合并到加载的对象中并再次保存,但必须有更好的方法。
我的实体:
@Entity
@Table
public class Location {
@Id
@NotNull
@Type(type = "uuid-char")
private UUID id = UUID.randomUUID();
@Column
@NotEmpty
private String title;
@Column
@NotEmpty
private String description;
...
我的仓库:
@Repository
public interface LocationRepository extends JpaRepository<Location, UUID>, LocationFilterFragment, JpaSpecificationExecutor {
Optional<Location> findLocationById(UUID id);
...
顺便说一句,我使用标准的repo.save(location) 方法。
更新:一种方法是使用动态查询/条件查询,但我正在寻找更方便且不易出错的方法。
这足以告诉我正确的方向,因为我不知道要寻找什么。提前致谢!
【问题讨论】:
-
你更新了多少字段?
-
我希望它是动态的。例如,如果我只想更新标题,我将标题设置为新值,并在
null上设置其他值。或者,如果我也想更新描述,我也将其设置为非空值。当然 ID 除外。 -
在您编写查询之前,我不确定您是否可以动态执行此类操作
-
这对我来说似乎很明显,必须有一个更简单的方法。 :D
-
你可以等到有人发布最佳答案
标签: java hibernate jpa spring-data-jpa spring-data