2017-10-17 1 views
0

소프트 삭제 된 레코드를 검색 할 수 있도록 id로 레코드를 쿼리 할 때 @Where 절을 적용하지 않는 방법은 무엇입니까?ID로 쿼리 할 때를 제외하고 소프트 삭제 된 레코드를 삭제 된 것으로 처리하십시오.

특정 사용자가 삭제되면 삭제 된 시간란에 타임 스탬프가 저장됩니다. 소프트 삭제 된 사용자가 ID로 끝점에서 쿼리되는 경우를 제외하고는 일반적으로 삭제 된 레코드로 취급되기를 원합니다. (GET/users/: Id).

현재 코드는 이미 모든 사용자를 쿼리 할 때 삭제 된 레코드를 반환해서는 안되는 요구 사항 중 하나를 이미 해결했습니다. GET/사용자가 조회 할 때 그러나 이것은/소프트 삭제 된 기록을 반환하지 않습니다 : 아이디

법인

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

저장소

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"); 
} 

그리고 당신은이 방법을 사용할 수 있으며 당신을 도울해야합니다 사용자 개체

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

에 적용 할 수 있습니다.

관련 문제