복붙노트

[SPRING] Hibernate에서 Spring 데이터 JPA의 모든 find 메소드에 대해 global where 절을 추가하는 방법은 무엇입니까?

SPRING

Hibernate에서 Spring 데이터 JPA의 모든 find 메소드에 대해 global where 절을 추가하는 방법은 무엇입니까?

우리는 Spring 데이터 JPA와 최대 절전 모드를 사용하는 웹 애플리케이션을 개발 중이다.

응용 프로그램에는 각 엔티티에 compid 필드가 있습니다. 즉, 모든 DB 호출 (스프링 데이터 메소드)에서 compid를 점검해야합니다.

나는 그것이 "compid =?"라는 방식을 필요로한다. 모든 검색 방법에 대해 자동으로 주입되도록 확인하십시오. 따라서 우리는 철저한 수표를 특별히 신경 쓰지 않아도됩니다.

스프링 데이터 JPA 프레임 워크에서이를 달성 할 수 있습니까?

해결법

  1. ==============================

    1.아마도 Hibernate의 주석 @ 당신이 도움이 될 것입니다. 엔터티와 관련된 JPA 쿼리에 전달 된 조건을 추가합니다. 예를 들어

    아마도 Hibernate의 주석 @ 당신이 도움이 될 것입니다. 엔터티와 관련된 JPA 쿼리에 전달 된 조건을 추가합니다. 예를 들어

    @Entity
    @Where(clause = "isDeleted='false'")
    public class Customer {
        //...
        @Column
        private Boolean isDeleted;
    }
    

    더 많은 정보 : 1, 2

  2. ==============================

    2.다른 사람들처럼 이것에 대해 설정된 방법이 없다고 말했습니다.

    다른 사람들처럼 이것에 대해 설정된 방법이 없다고 말했습니다.

    한 가지 옵션은 예제를 통해 쿼리를 봄 데이터 문서에서 확인하는 것입니다.

    Person person = new Person();
    person.setFirstname("Dave");
    Example<Person> example = Example.of(person); 
    

    그래서 당신은 객체 나 부모 JPA 객체에서 compid를 디폴트로 할 수있다.

    또 다른 옵션은 맞춤 저장소입니다.

  3. ==============================

    3.Abhijit Sarkar와 동의

    Abhijit Sarkar와 동의

    당신은 당신의 목표를 최대 절전 모드로 청취자와 측면을 달성 할 수 있습니다. 나는 다음을 제안 할 수있다. 서비스 메소드를 표시하기 위해 주석을 @Compable (또는 당신이 무엇이라고 부르는 지) 만드십시오. bean 및 @Aspect이어야하는 CompAspect를 작성하십시오. 이런 식으로해야합니다.

    @Around("@annotation(compable)")`
        public Object enableClientFilter(ProceedingJoinPoint pjp, Compable compable) throws Throwable {
            Session session = (Session) em.getDelegate();
            try {
                if (session.isOpen()) {
                    session.enableFilter("compid_filter_name")
                            .setParameter("comp_id", your_comp_id);
                }
                return pjp.proceed();
            } finally {
                if (session.isOpen()) {
                    session.disableFilter("filter_name");
                }
            }
        }
    
    em  - EntityManager
    

    3) 또한 최대 절전 모드 필터를 제공해야합니다. 주석을 사용하면 다음과 같이 표시됩니다.

    @FilterDef(name="compid_filter_name", parameters=@ParamDef(name="comp_id", type="java.util.Long"))
    @Filters(@Filter(name="compid_filter_name", condition="comp_id=:comp_id"))
    

    그럼 당신 조건은 compid =? 아래의 @Service 메소드가됩니다.

       @Compable
        someServicweMethod(){
         List<YourEntity> l = someRepository.findAllWithNamesLike("test");
        } 
    

    그것은 기본적으로 선택을위한 것입니다. 업데이트 / 삭제의 경우이 스키마에는 EntityListener가 필요합니다.

  4. from https://stackoverflow.com/questions/45952919/how-to-add-global-where-clause-for-all-find-methods-of-spring-data-jpa-with-hibe by cc-by-sa and MIT license