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
_
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(…) ║
╚═════════════════════╩═══════════════════════╝
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);
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);
}
}
Une transformation pragmatique
Ancienne façon:
Entity aThing = repository.findOne(1L);
Nouvelle façon:
Optional<Entity> aThing = repository.findById(1L);