Java 如何只更新SpringJPA存储库中所有字段的子集?
我想更新Java 如何只更新SpringJPA存储库中所有字段的子集?,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,我想更新用户域模型中的一个字段,我不想处理域模型的整个实例 更新数据在UserEncryptionData域模型类中表示BaseEntity(父类)持有User实体的主键-因此JPA拥有处理更新所需的所有信息(IMHO) @Entity @Table(name = "users") public class UserEncryptionData extends BaseEntity { @Column(nullable = false, name = "salt", unique =
用户
域模型中的一个字段,我不想处理域模型的整个实例
更新数据在UserEncryptionData
域模型类中表示BaseEntity
(父类)持有User
实体的主键-因此JPA拥有处理更新所需的所有信息(IMHO)
@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...
}
public interface UserRepository扩展了BaseRepository{
用户更新(UserEncryptionData encryptionData);
//其余的省略了。。。
}
但斯普林抱怨道:
原因:
org.springframework.data.mapping.PropertyReferenceException:否
找到用户类型的属性更新
这种方法是否可以只更新域模型字段的子集,还是我必须处理整个
用户
实体?从数据库中获取用户加密数据
对象后,可以对其使用保存方法,并修改需要更新的字段,Spring将完成此工作
UserEncryptionData user = userRepository.findById("id");
user.setSalt("updated salt");
user.save();
但是,如果只想更新一个字段,则必须使用@修改
和@查询
注释编写自己的更新查询:
@Modifying
@Query("update UserEncryptionData u set u.salt = :salt where u.id = :id")
int setUserById(@Param("salt") String salt, @Param("id") Long id);