0

update(User)SDN 4.0.0を使った機能を持ったサービスを書いてみました。関数は、データベースに同じ ID を持つユーザーが存在するかどうかを確認し、存在する場合は、このユーザーを新しいユーザーで上書きします。

UserRepository拡張するを持っているGraphRepository<User>私は、次のコードを書きました:

User updateUser(User user){
  if(userRepository.findOne(user.getId())!=null){
    user = userRepository.save(user);
    return user;
  }else{
    //Exception handling here
  }
}

findOne(id)が呼び出された瞬間から、ユーザーオブジェクトのすべての属性がデータベース内のユーザーで上書きされるため、更新する各ユーザーがデータベース内の状態のままになるという問題があります。

existsById(Long id)クエリ"Match (n:User) where ID(n)={0}" で注釈が付けられた関数をリポジトリに追加することにより、問題を既に修正しました。

ただし、取得しようとしたオブジェクトと同じ ID を持つオブジェクトを SDN が上書きする理由については、まだ興味があります。参照が関係していると思いますが、その利点は実際にはわかりません。

4

1 に答える 1

2

これは仕様によるもので、データベースからエンティティをロードすると、グラフの最新バージョンになり、保存されていない変更が上書きされます。

操作の順序を変更する場合は、最初に読み込み、存在する場合は変更して保存します。問題ありません。

于 2016-04-06T04:53:39.217 に答える