Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何只更新SpringJPA存储库中所有字段的子集?_Java_Spring_Hibernate_Spring Data Jpa - Fatal编程技术网

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);