2017-10-17 18 views
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> { 
} 

答えて

0

私は、あなたが休止状態のフィルターについて読むことをお勧めします。ここであなたはあなたがIDを削除するかどうかを返すかのいずれかの状態を取ることができます。 コードを共有しましょう。

@Before("@annotation(com.talentica.talentpool.core.applicant.aop.Applicant)") 
public void enableUserFilter() { 
Session session = (Session) entityManager.getDelegate(); 
if (session.isConnected() && yourCondition) { 
    session.enableFilter("userFilter"); 
} 

、あなたがこの方法でそれを使用することができますし、それはあなたを助ける必要がありますUserエンティティ

@FilterDef(name = "userFilter") 
@Filters({ @Filter(name = "userFilter", condition = "is_deleted = null") }) 
public class User implements Serializable { 
} 

にこれを適用します。

関連する問題