0
ソフト削除されたレコードを取得できるようにidでレコードを照会するときに@Where節を適用しない方法はありますか?ソフト削除されたレコードをIDで照会する場合を除いて削除します。
特定のユーザーが削除されると、削除されたフィールドにタイムスタンプが保存されます。ソフト削除されたユーザーは、IDでエンドポイントで照会された場合を除き、通常は削除されたレコードとして扱われます。 (GET/users /:Id)。
現在のコードでは、すべてのユーザーにクエリを実行したときに削除されたレコードを返すべきではない要件の1つが既に解決されています。同上
エンティティ
@Entity(name = "user")
@Where(clause = "deleted IS NULL")
public class User {
@Id
@GeneratedValue
private Long id;
@Column(unique = true)
private String username;
private String password;
//getters and setters
}
コントローラ
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<PaginatedResponse<User>> getAllUsers(
Specification<User> spec,
@RequestParam(defaultValue = "") String[] sort,
@RequestParam(defaultValue = "50") int limit,
@RequestParam(defaultValue = "0") int offset) {
List<User> allUsers = userService.findAll(spec);
List<User> users = userService.findAll(spec, Pageables.with(offset, limit, sort));
return ResponseEntity.ok(new PaginatedResponse<>(allUsers.size(), limit, offset, users));
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<User> getUser(@PathVariable("id") Long userId) {
User user = userService.findOne(userId);
Objects.requireNonNull(user, "No user with id: " + userId);
return ResponseEntity.ok(user);
}
リポジトリ
:GET /ユーザー/による問合せが、これはソフト削除されたレコードを返しません。public interface UserRepository extends BaseRepository<User> {
}
@NoRepositoryBean
public interface BaseRepository<T> extends JpaRepository<T, Long>, JpaSpecificationExecutor<T> {
}