我想更新 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/