web-dev-qa-db-fra.com

Méthode CrudRepository manquante # findOne

J'utilise Spring 5 dans mon projet. Jusqu'à aujourd'hui, la méthode disponible CrudRepository#findOne .

Mais après avoir téléchargé le dernier instantané, il a soudainement disparu! Y a-t-il une référence que la méthode n'est pas disponible maintenant?

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

UPDATE:

On dirait que cette méthode a été remplacée par _CrudRepository#findById_

81
Andrii Abramov

Veuillez voir DATACMNS-944 qui est associé à this commit 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(…)         ║
╚═════════════════════╩═══════════════════════╝
122
Sean Carroll

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

Étant peu familiarisé avec les nouvelles Java, il m'a fallu un peu de temps pour le comprendre, mais cela transforme le comportement findById en un findOne:

return rep.findById(id).orElse(null);
91
Tinus Tate

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

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

Une transformation pragmatique

Ancienne façon:

Entity aThing = repository.findOne(1L);

Nouvelle façon:

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