java - framework - Falta el método CrudRepository#findOne
spring data repository save (4)
Consulte DATACMNS-944 que está asociado a esta confirmación que tiene los siguientes cambios de nombre
╔═════════════════════╦═══════════════════════╗
║ Old name ║ New name ║
╠═════════════════════╬═══════════════════════╣
║ findOne(…) ║ findById(…) ║
╠═════════════════════╬═══════════════════════╣
║ save(Iterable) ║ saveAll(Iterable) ║
╠═════════════════════╬═══════════════════════╣
║ findAll(Iterable) ║ findAllById(…) ║
╠═════════════════════╬═══════════════════════╣
║ delete(ID) ║ deleteById(ID) ║
╠═════════════════════╬═══════════════════════╣
║ delete(Iterable) ║ deleteAll(Iterable) ║
╠═════════════════════╬═══════════════════════╣
║ exists() ║ existsById(…) ║
╚═════════════════════╩═══════════════════════╝
Estoy usando Spring 5 en mi proyecto.
Hasta hoy había un método disponible
CrudRepository#findOne
.
Pero después de descargar la última instantánea, ¡de repente desapareció! ¿Hay alguna referencia de que el método no está disponible ahora?
Mi lista de dependencias:
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''
}
ACTUALIZAR:
Parece que este método ha sido reemplazado con
CrudRepository#findById
Tenga en cuenta que
findById
no es un reemplazo exacto para
findOne
, devuelve un
Optional
lugar de
null
.
Al no estar muy familiarizado con las nuevas cosas de Java, me tomó un tiempo descubrirlo, pero esto convierte el comportamiento
findById
en
findOne
one:
return rep.findById(id).orElse(null);
Tuvimos muchos cientos de usos del antiguo método
findOne()
.
En lugar de embarcarnos en un gigantesco refactor, terminamos creando la siguiente interfaz intermedia e hicimos que nuestros repositorios la extendieran en lugar de extender
JpaRepository
directamente
@NoRepositoryBean
public interface BaseJpaRepository<T, ID> extends JpaRepository<T, ID> {
default T findOne(ID id) {
return (T) findById(id).orElse(null);
}
}
Una transformación pragmática.
Vieja forma:
Entity aThing = repository.findOne(1L);
Nueva manera:
Optional<Entity> aThing = repository.findById(1L);