gpt4 book ai didi

java - 如何仅更新 Spring JPA 存储库中所有字段的子集?

转载 作者:行者123 更新时间:2023-11-30 06:52:02 25 4
gpt4 key购买 nike

我想更新 User 域模型中的一个字段,但我不想处理域模型的整个实例。

更新数据在UserEncryptionData域模型类中表示。 BaseEntity (父类)保存 User 实体的主键 - 因此 JPA 拥有处理更新所需的所有信息(恕我直言)。

@Entity
@Table(name = "users")
public class UserEncryptionData extends BaseEntity {

@Column(nullable = false, name = "salt", unique = true)
@JsonProperty("salt")
private String salt;

public String getSalt() {
return salt;
}

public void setSalt(String salt) {
this.salt = salt;
}
}

UserRepository中我想更新这些数据:

public interface UserRepository extends BaseRepository<User, UUID> {    
User update(UserEncryptionData encryptionData);
// the rest omitted...
}

但是 Spring 提示:

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property update found for type User!

这种方式是否可以仅更新域模型字段的子集,或者我是否必须处理整个 User 实体?

最佳答案

从数据库获取UserEncryptionData对象后,您可以使用save方法,并修改您需要更新的字段,Spring将完成这项工作。

UserEncryptionData user = userRepository.findById("id");

user.setSalt("updated salt");

user.save();

但是,如果您只想更新一个字段,则必须使用 @Modifying@Query 注释编写自己的更新查询:

@Modifying
@Query("update UserEncryptionData u set u.salt = :salt where u.id = :id")
int setUserById(@Param("salt") String salt, @Param("id") Long id);

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.modifying-queries

关于java - 如何仅更新 Spring JPA 存储库中所有字段的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42556394/

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