복붙노트

[SPRING] 누락 된 CrudRepository # findOne 메소드

SPRING

누락 된 CrudRepository # findOne 메소드

내 프로젝트에서 Spring 5를 사용하고 있습니다. 오늘까지 가능한 방법 CrudRepository # findOne이있었습니다.

그러나 최신 스냅 샷을 다운로드 한 후 갑자기 사라졌습니다! 현재이 방법을 사용할 수 없다는 언급이 있습니까?

내 의존성 목록 :

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'


repositories {
    mavenCentral()
    maven { url "https://repo.spring.io/snapshot" }
    maven { url "https://repo.spring.io/milestone" }
}    

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-validation'
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtime 'org.springframework.boot:spring-boot-devtools'

    runtime 'com.h2database:h2:1.4.194'
    compile 'org.projectlombok:lombok:1.16.14'
    compile 'org.modelmapper:modelmapper:0.7.5'


    testCompile 'org.springframework.boot:spring-boot-starter-test'

    testCompile 'org.codehaus.groovy:groovy-all:2.4.10'

    testCompile 'cglib:cglib:3.2.5'
    testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
}

최신 정보:

이 방법이 CrudRepository # findById로 대체 된 것으로 보입니다.

해결법

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

    1.이 커밋과 관련된 DATACMNS-944는 다음과 같은 이름을 가지고 있습니다.

    이 커밋과 관련된 DATACMNS-944는 다음과 같은 이름을 가지고 있습니다.

    ╔═════════════════════╦═══════════════════════╗
    ║      Old name       ║       New name        ║
    ╠═════════════════════╬═══════════════════════╣
    ║ findOne(…)          ║ findById(…)           ║
    ╠═════════════════════╬═══════════════════════╣
    ║ save(Iterable)      ║ saveAll(Iterable)     ║
    ╠═════════════════════╬═══════════════════════╣
    ║ findAll(Iterable)   ║ findAllById(…)        ║
    ╠═════════════════════╬═══════════════════════╣
    ║ delete(ID)          ║ deleteById(ID)        ║
    ╠═════════════════════╬═══════════════════════╣
    ║ delete(Iterable)    ║ deleteAll(Iterable)   ║
    ╠═════════════════════╬═══════════════════════╣
    ║ exists()            ║ existsById(…)         ║
    ╚═════════════════════╩═══════════════════════╝
    
  2. ==============================

    2.findById는 findOne을 대체하지 않으며 null 대신 Optional을 반환합니다.

    findById는 findOne을 대체하지 않으며 null 대신 Optional을 반환합니다.

    새로운 자바 작업에 익숙하지 않다는 것을 알기에는 조금 시간이 걸렸지 만, findById 동작을 findOne으로 변경했습니다.

    return rep.findById(id).orElse(null);
    
  3. ==============================

    3.우리는 오래된 findOne () 메서드를 사용하여 수백 가지의 구문을 사용했습니다. 매머드 리팩토링을 시작하기보다는 다음과 같은 중개 인터페이스를 생성하고 JpaRepository를 직접 확장하는 대신 리포지토리를 확장했습니다.

    우리는 오래된 findOne () 메서드를 사용하여 수백 가지의 구문을 사용했습니다. 매머드 리팩토링을 시작하기보다는 다음과 같은 중개 인터페이스를 생성하고 JpaRepository를 직접 확장하는 대신 리포지토리를 확장했습니다.

    @NoRepositoryBean
    public interface BaseJpaRepository<T, ID> extends JpaRepository<T, ID> { 
        default T findOne(ID id) { 
            return (T) findById(id).orElse(null); 
        } 
    } 
    
  4. ==============================

    4.실용적인 변형

    실용적인 변형

    옛날 방식 :

    Entity aThing = repository.findOne(1L);
    

    새로운 방식:

    Optional<Entity> aThing = repository.findById(1L);
    
  5. from https://stackoverflow.com/questions/44101061/missing-crudrepositoryfindone-method by cc-by-sa and MIT license