itsource

대규모 프로젝트의 경우 스프링 데이터 JPA와 휴지 상태와의 차이점은 무엇입니까?

mycopycode 2022. 10. 25. 21:34
반응형

대규모 프로젝트의 경우 스프링 데이터 JPA와 휴지 상태와의 차이점은 무엇입니까?

새로운 프로젝트에 Hibernate를 계속 사용할지, 아니면 JPA와 새로운 Spring Data 구현에 발을 담글지 고민하고 있습니다.

Spring Data 프레임워크는 대규모 프로젝트 또는 쿼리 요건이 적은 소규모 프로젝트를 대상으로 하고 있습니까?

코드 리덕션의 장점은 확실히 알 수 있습니다만,@Query주석, 동적 쿼리에 대해 어떤 작업을 수행합니까?상당히 복잡한 save() 메서드를 구현하려면 어떻게 해야 합니까?

매뉴얼에는 메인저장소에서 구현되는 커스텀인터페이스와 구현을 작성하도록 되어 있습니다만, crud저장소 자체의 슈퍼메서드에 액세스 할 필요가 있는 경우는 어떻게 해야 할까요?crud 저장소는 커스텀 저장소를 구현합니다(반대가 아닙니다).이상한 디자인인 것 같아요.

이 프레임워크가 복잡하고 큰 어플리케이션의 과제에 대응할 수 있을지는 매우 불확실합니다.하이버네이트에 대해서는 지금까지 많은 문제를 겪어본 적이 없기 때문에, Spring Data JPA를 사용하는 것보다 신뢰할 수 있는 오래된 것을 계속 사용하는 것을 검토하고 있습니다.

어떻게 해야 하나?Spring Data JPA를 사용할 경우 예기치 않은 복잡성과 비용은 어떻게 발생합니까?

그렇게,spring-data복잡한 쿼리에 도움이 되는 추가 마법을 사용합니다.처음에는 이상하고 문서에서는 완전히 건너뛸 수 있지만, 매우 강력하고 유용합니다.

커스텀을 작성한다.Repository그리고 'RepositoryImpl'이라는 커스텀을 만들어 스프링에게 위치를 알려준다.다음은 예를 제시하겠습니다.

구성 클래스 - 여전히 필요한 xml 구성을 가리키며 리포지토리 패키지를 가리키는 주석이 있습니다(찾습니다).*Impl클래스 자동 생성) :

@Configuration
@EnableJpaRepositories(basePackages = {"com.examples.repositories"})
@EnableTransactionManagement
public class MyConfiguration {
}

jpa-interiatories.xml - tellSpring저장소의 위치를 참조하십시오.또 말하다Spring를 사용하여 커스텀저장소를 검색하다CustomImpl파일 이름:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

<jpa:repositories base-package="com.example.repositories" repository-impl-postfix="CustomImpl" />

</beans>

MyObjectRepository- 주석 첨부 및 주석 없는 쿼리 메서드를 넣을 수 있습니다.이 저장소 인터페이스가 어떻게 확장되는지 주의해 주세요.Custom하나:

@Transactional
public interface MyObjectRepository extends JpaRepository<MyObject, Integer>, MyObjectRepositoryCustom {

    List<MyObject> findByName(String name);

    @Query("select * from my_object where name = ?0 or middle_name = ?0")
    List<MyObject> findByFirstNameOrMiddleName(String name);
}

MyObjectRepositoryCustom- 단순한 쿼리나 주석으로는 처리할 수 없는 보다 복잡한 저장소 메서드:

public interface MyObjectRepositoryCustom {

    List<MyObject> findByNameWithWeirdOrdering(String name);
}

MyObjectRepositoryCustomImpl- 자동 배선을 사용하여 이러한 방법을 실제로 구현할 수 있습니다.EntityManager:

public class MyObjectRepositoryCustomImpl implements MyObjectRepositoryCustom {

    @Autowired
    private EntityManager entityManager;

    public final List<MyObject> findByNameWithWeirdOrdering(String name) {
        Query query = query(where("name").is(name));
        query.sort().on("whatever", Order.ASC);
        return entityManager.find(query, MyObject.class);
    }
}

놀랍게도 이 모든 것이 조합되어 양쪽 인터페이스(및 CRUD 인터페이스, 구현한 것)로부터의 메서드가 모두 표시됩니다.

myObjectRepository.

다음과 같이 표시됩니다.

myObjectRepository.save()
myObjectRepository.findAll()
myObjectRepository.findByName()
myObjectRepository.findByFirstNameOrMiddleName()
myObjectRepository.findByNameWithWeirdOrdering()

정말 효과가 있어요.쿼리용 인터페이스는 1개입니다. spring-data대규모 어플리케이션에 대응할 준비가 되어 있습니다.또한 단순 또는 주석으로 푸시할 수 있는 쿼리가 많을수록 더 유리합니다.

이 모든 내용은 Spring Data Jpa 사이트에서 문서화되어 있습니다.

행운을 빌어요.

저는 Spring Data JPA를 단순한 쿼리 요구로 소규모 및 대규모 프로젝트에 사용해 왔습니다.가장 큰 장점은 이 기능을 사용할 필요가 없다는 것입니다.@Query주석입니다.Spring Data에는 대규모 프로젝트 및 최근 프로젝트에서 이 데이터를 사용할 수 없도록 하는 것이 없습니다.QueryDSL도움이 될 수 있습니다.다음 예에서는 QueryDSL을 사용하여 휴지 상태를 대상으로 하는 방법을 보여 줍니다.

복잡한 쿼리를 예측하고 JPA가 없는 휴지 상태 오브젝트를 사용하는 것이 편안하다면 다른 조합으로 간단한 스프링 데이터를 사용할 수 있습니다.Repository는, 필요한 특정의 방법을 가지는 복잡한 휴지 상태 베이스의 것 옆에 있습니다.휴지 상태 구현을 스프링 데이터 JPA 구조로 비틀어 넣는 것이 덜 번거로울 수 있습니다.

Spring JPA는 쿼리 메서드 선언을 사용하여 SQL 및 일부 HQL 작성에서 많은 추상화를 제공합니다.Spring JPA는 쿼리 생성과 함께 빛나지만 완전한 휴지 상태 솔루션을 원하는 경우 필요에 따라 커스터마이즈할 수 있습니다.Spring JPA는 아직 휴지 상태를 기반으로 하기 때문입니다.상세한 것에 대하여는, 문서 http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html 를 참조해 주세요.

언급URL : https://stackoverflow.com/questions/12790853/how-does-spring-data-jpa-differ-from-hibernate-for-large-projects

반응형