source

휴지 모드와 스프링 데이터 JPA의 차이점은 무엇입니까?

factcode 2023. 3. 25. 11:55
반응형

휴지 모드와 스프링 데이터 JPA의 차이점은 무엇입니까?

휴지 모드와 스프링 데이터 JPA의 주요 차이점은 무엇입니까?

휴지 상태 또는 스프링 데이터 JPA를 사용하지 않는 경우

또, Spring JDBC 템플릿의 퍼포먼스가 Hibernate 및 Spring Data JPA보다 좋은 경우는 언제입니까?

하이버네이트는 JPA 구현이며 스프링 데이터 JPA는 JPA 데이터 액세스 추상화입니다.스프링 데이터 JPA는 JPA 공급자가 없으면 작동하지 않습니다.

Spring Data는 DDD 패턴 또는 레거시 솔루션을 제공합니다.GenericDao표기법을 사용자 를 생성할 .메서드 이름 규칙을 통해 사용자 대신 JPA 쿼리를 생성할 수도 있습니다.

스프링 데이터에서는 휴지 상태, Eclipse Link 또는 기타 JPA 공급자를 사용할 수 있습니다. 또는 흥미로운 장점은 Spring Java EE를 를 선언적으로 할 수 입니다.@Transactional석입니니다다

Spring JDBC는 훨씬 가볍고 네이티브 쿼리를 위한 것입니다.JDBC만을 사용하는 경우에는 Spring JDBC를 사용하여 JDBC의 장황함을 처리하는 것이 좋습니다.

따라서 Hibernate와 Spring Data는 경쟁 제품보다 보완적입니다.

여기에서는, 3개의 다른 것을 사용하고 있습니다.

  1. JPA : Java persistence api. Java 객체의 데이터를 데이터베이스 내의 관계에서 유지, 읽기, 관리하기 위한 규격을 제공합니다.
  2. 휴지 상태:jpa를 구현하는 프로바이더는 다양합니다.겨울잠도 그 중 하나입니다.다른 프로바이더도 있습니다.그러나 스프링에서 jpa를 사용하면 나중에 다른 공급자로 전환할 수 있습니다.
  3. Spring Data JPA : 이것은 jpa 위에 있는 또 다른 층으로, 당신의 삶을 편하게 해준다.

그럼 spring data jpa와 spring + hibernate가 어떻게 동작하는지 알아보겠습니다.


스프링 데이터 JPA:

어플리케이션에서 spring + hibernate를 사용하고 있다고 칩시다.이제 휴지 상태의 Session Factory를 사용하여 crud 작업을 작성하는 dao 인터페이스와 구현이 필요합니다.Employee 클래스의 dao 클래스를 작성한다고 가정해 보겠습니다.내일 어플리케이션에서 다른 엔티티에 대해 유사한 crud 연산을 작성해야 할 수 있습니다.여기 보일러 플레이트 코드가 많이 있습니다.

이제 Spring data jpa는 dao 인터페이스를 정의할 수 있도록 저장소(crudrepository, jparepository)를 확장하여 런타임에 dao 구현을 제공합니다.더 이상 dao 구현을 쓸 필요가 없습니다.그래서 봄 데이터 jpa는 당신의 삶을 편하게 해줍니다.

나는 SpringJ에 동의하지 않는다.PA는 생활을 편하게 한다.예, 일부 클래스가 제공되고 간단한 DAO를 빠르게 만들 수 있지만, 실제로는 이것이 여러분이 할 수 있는 전부입니다.findById() 또는 저장 이외의 작업을 수행하려면 지옥을 거쳐야 합니다.

  • org.springframework.data.repository 클래스에 EntityManager 액세스가 없습니다(이것은 기본 JPA 클래스입니다).
  • 자체 트랜잭션 관리(증명서 트랜잭션은 허용되지 않음)
  • 복수의 데이터 소스 구성에 관한 큰 문제
  • 데이터 소스 풀링 없음(HikariCP를 서드파티 라이브러리로 사용해야 함)

자신의 트랜잭션 관리가 불리한 이유는 무엇입니까?Java 1.8은 인터페이스에 기본 메서드, Spring 주석 기반 트랜잭션, simple은 작동하지 않습니다.

아쉽게도 Spring J.PA는 리플렉션을 기반으로 하며 메서드 이름 또는 엔티티 패키지를 주석(!)으로 지정해야 하는 경우가 있습니다.그래서 리팩터링은 큰 사고를 내죠안타깝게도 @Transactional은 프라이머리 DS에서만 동작합니다.(여러 DataSources가 있는 경우 프라이머리 DS에서만 트랜잭션이 동작합니다:)

휴지 모드와 스프링 데이터 JPA의 주요 차이점은 무엇입니까?

휴지상태는 JPA 호환, Spring JPA Spring 호환성이 있습니다.휴지 상태 JPA DAO는 SpringJ의 경우 JavaEE 또는 Hibernate Standalone과 함께 사용할 수 있습니다.예를 들어 PA는 Spring - Spring Boot 내에서 사용할 수 있습니다.

휴지 상태 또는 스프링 데이터 JPA를 사용하지 않는 경우또, Spring JDBC 템플릿의 퍼포먼스가 Hibernate/Spring Data JPA보다 좋은 경우는 언제입니까?

Spring JDBC는 Join을 많이 사용해야 하는 경우 또는 여러 데이터 소스 연결을 가진 Spring을 사용해야 하는 경우에만 사용하십시오.일반적으로 Join의 경우 JPA를 사용하지 마십시오.

그러나 일반적인 조언은 새로운 솔루션인 Daobab(http://www.daobab.io을 사용입니다.Daobab은 나의 Java 및 JPA 엔진 인테그레이터이며, 당신의 작업에 많은 도움이 될 것입니다.

Spring Data는 편리 입니다.JPA많은 것을 추상화하고 Spring Magic(좋든 싫든)을 영속 스토어에 액세스합니다.주로 관계형 데이터베이스 작업에 사용됩니다.즉, 다음과 같은 방식을 가진 인터페이스를 선언할 수 있습니다.findByNameOrderByAge(String name);실행 시 구문 분석되어 적절한 값으로 변환됩니다.JPA문의합니다.

그 위에 배치되어 있다JPA다음과 같은 용도가 있습니다.

  1. 모르는 신참 개발자SQL잘 모를 수도 있어요이것은 재앙을 부르는 방법이지만, 그들은 그 프로젝트가 사소한 것이라도 무사히 빠져나갈 수 있다.

  2. 업무에 정통하여 신속하게 작업을 수행하고자 하는 경험이 풍부한 엔지니어.이것은 실행 가능한 전략일 수 있습니다(다만 자세히 읽어 보십시오).

제 경험상으로는Spring Data마법이 너무 심하다(이것은 에 적용됩니다).Spring일반적으로)한 프로젝트에서 많이 사용하기 시작했고, 결국 도서관을 치우지 못하고 추악한 해결책으로 끝나는 코너 케이스가 몇 개 있었습니다.나중에 다른 사용자의 불만을 읽고 이러한 문제가 일반적인 것임을 알게 되었습니다.Spring Data예를 들어, 몇 시간 동안 조사/서빙을 하게 된 이 문제를 확인합니다.

 public TourAccommodationRate createTourAccommodationRate(
        @RequestBody TourAccommodationRate tourAccommodationRate
    ) {
        if (tourAccommodationRate.getId() != null) {
            throw new BadRequestException("id MUST NOT be specified in a body during entry creation");
        }

        // This is an ugly hack required for the Room slim model to work. The problem stems from the fact that
        // when we send a child entity having the many-to-many (M:N) relation to the containing entity, its
        // information is not fetched. As a result, we get NPEs when trying to access all but its Id in the
        // code creating the corresponding slim model. By detaching the entity from the persistence context we
        // force the ORM to re-fetch it from the database instead of taking it from the cache

        tourAccommodationRateRepository.save(tourAccommodationRate);
        entityManager.detach(tourAccommodationRate);
        return tourAccommodationRateRepository.findOne(tourAccommodationRate.getId());
    }

결국 더 낮은 레벨로 내려가서JDBI- 보일러 플레이트로부터 당신을 구할 수 있을 정도의 충분한 "장난감"이 있는 멋진 도서관.이를 통해 SQL 쿼리를 완벽하게 제어할 수 있으며 라이브러리와 싸울 필요가 거의 없습니다.

SQL 쿼리의 심플함과 제어성을 원한다면 Spring Data/Spring JDBC를 추천합니다.

JPA에서의 학습곡선은 양호하고 문제를 디버깅하기 어려울 수 있습니다.한편 SQL을 완전히 제어할 수 있지만 쿼리를 최적화하고 성능을 향상시키는 것이 훨씬 쉬워집니다.SQL을 DBA 또는 데이터베이스에 대해 더 잘 알고 있는 사람과 쉽게 공유할 수 있습니다.

휴지상태는 데이터베이스의 Java 객체 사양인 "JPA"를 구현한 것입니다.

다른 ORMS를 전환할 수 있으므로 w.r.t JPA를 사용하는 것을 권장합니다.

JDBC를 사용할 때는 SQL 쿼리를 사용해야 합니다.따라서 SQL에 능통하다면 JDBC로 넘어갑니다.

언급URL : https://stackoverflow.com/questions/23862994/whats-the-difference-between-hibernate-and-spring-data-jpa

반응형