110 votes

Méthode CrudRepository # findOne manquante

Je suis à l'aide de Printemps 5 dans mon projet. Jusqu'à aujourd'hui il existe une méthode CrudRepository#findOne.

Mais après le téléchargement de la dernière snapshot, il a soudainement disparu! Est-il une référence que la méthode n'est pas disponible aujourd'hui?

Ma liste de dépendances:

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'
}

Mise à JOUR:

Semble que cette méthode a été remplacé par CrudRepository#findById

163voto

Sean Carroll Points 1918

Veuillez voir DATACMNS-944 qui est associé à ce commit et qui a les renommés suivants

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

110voto

Tinus Tate Points 1226

Notez que findById n'est pas un remplacement exact pour findOne , il retourne un Optional au lieu de null .

Comme je ne connaissais pas très bien les nouvelles choses Java, cela m'a pris un peu de temps à comprendre, mais cela transforme le comportement findById en findOne un:

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

36voto

ashario Points 91

Nous avions plusieurs centaines d'utilisations de l'ancienne méthode findOne() . Plutôt que de nous lancer dans un refactor gigantesque, nous avons fini par créer l'interface intermédiaire suivante et avons demandé à nos référentiels de l'étendre au lieu d'étendre directement JpaRepository

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

7voto

dovy Points 358

Une transformation pragmatique

Ancienne façon:

 Entity aThing = repository.findOne(1L);
 

Nouvelle façon:

 Optional<Entity> aThing = repository.findById(1L);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X