カスタムメソッドを記述するか、@Query
アノテーションを使用できます。
カスタムメソッドの場合。
public interface RecordRepository extends RecordRepositoryCustom,
CrudRepository<Record, Long>
{
}
public interface RecordRepositoryCustom {
// Custom method
void massUpdateRecords(long... ids);
}
public class RecordRepositoryImpl implements RecordRepositoryCustom {
@Override
public void massUpdateRecords(long... ids) {
//implement using em or querydsl
}
}
@Queryアノテーションについては、
public interface RecordRepository extends CrudRepository<Record, Long>
{
@Query("update records set someColumn=someValue where id in :ids")
void massUpdateRecords(@Param("ids") long... ids);
}
あなたのモデルクラスは、カスタムメソッドを持つ再利用可能にしたい場合は@NamedQuery
オプションもあります。詳細は、スプリングのデータ参照文書で
@Entity
@NamedQuery(name = "Record.massUpdateRecords", query = "update records set someColumn=someValue where id in :ids")
@Table(name = "records")
public class Record {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
//rest of the entity...
}
public interface RecordRepository extends CrudRepository<Record, Long>
{
//this will use the namedquery
void massUpdateRecords(@Param("ids") long... ids);
}
チェックrepositories.custom-implementations、jpa.query-methods.at-queryとjpa.query-methods.named-queries。
私はや、質問を参照してください(設定2番目の段落「と、彼らがしたいいくつかの値を選択してもしなくてもよい性質の束があるのでこれは、動作しません更新")。私が今までに思い付くことができるのは、個々のプロパティごとに異なる一括更新メソッドを持たせることだけですが、それは無駄です(複数の更新を実行する)ようです。私はこれをすべて1回の呼び出しで行う方法を探しています。 –
私はこの方法を使わなくてはなりませんでした。私は大量更新が可能な私のbeanの各プロパティのリポジトリメソッドを作成しました。私はその後、サービスでユーザーが更新したいプロパティを確認し、適切な更新メソッドを呼び出すロジックを確認しました。 –