2017-03-02 3 views
0

Userドメインモデルの1つのフィールドを更新したいと思います。ドメインモデルのインスタンス全体を処理したくありません。Spring JPAリポジトリのすべてのフィールドのサブセットのみを更新するには?

更新データはUserEncryptionDataドメインモデルクラスで表されます。 BaseEntity(親クラス)は、Userエンティティの主キーを保持しているため、JPAには更新を処理するために必要なすべての情報(IMHO)があります。 UserRepository

@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; 
    } 
} 

私はこれらのデータを更新したいと思います:

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

が、春は文句: org.springframework.data.mapping.PropertyReferenceException:によって引き起こさ

をなし タイプUserのプロパティ更新が見つかりました!

ドメインモデルフィールドのサブセットのみを更新することは可能ですか、それともUserエンティティ全体を処理する必要がありますか?

答えて

1

UserEncryptionDataオブジェクトの保存メソッドをデータベースから取得してから使用して、更新が必要なフィールドを変更して、Springがそのジョブを実行します。

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

user.setSalt("updated salt"); 

user.save(); 

しかし、あなたはあなたが@Modifying@Query注釈を使用して、独自の更新クエリを記述する必要が1つのフィールド更新する場合:

@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

関連する問題