Ontbrekende CrudRepository#findOne-methode

Ik gebruik Spring 5 in mijn project. Tot vandaag was er een beschikbare methode CrudRepository#findOne.

Maar na het downloaden van de laatste snapshot verdween het plotseling! Is er een verwijzing dat de methode nu niet beschikbaar is?

Mijn afhankelijkheidslijst:

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-data-jpa'
    runtime 'com.h2database:h2:1.4.194'
}

UPDATE:

Het lijkt erop dat deze methode is vervangen door CrudRepository#findById


Antwoord 1, autoriteit 100%

Zie DATACMNS-944dat is gekoppeld aan deze commitdie de volgende namen heeft

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

Antwoord 2, autoriteit 66%

Merk op dat findByIdgeen exacte vervanging is voor findOne, het retourneert een Optionalin plaats van null.

Omdat ik niet erg bekend ben met nieuwe Java-dingen, duurde het even voordat ik erachter kwam, maar dit verandert het findById-gedrag in het findOne-gedrag:

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

Antwoord 3, autoriteit 24%

We hadden vele honderden toepassingen van de oude findOne()-methode. In plaats van aan een gigantische refactor te beginnen, hebben we uiteindelijk de volgende intermediaire interface gemaakt en deze door onze repositories laten uitbreiden in plaats van JpaRepositoryrechtstreeks

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

Antwoord 4, autoriteit 5%

Een pragmatische transformatie

Oude manier:

Entity aThing = repository.findOne(1L);

Nieuwe manier:

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

Antwoord 5

Een andere manier meer. Voeg een @Querytoe. Zelfs als ik de Optionalliever zou consumeren:

@Repository
public interface AccountRepository extends JpaRepository<AccountEntity, Long> {
    @Query("SELECT a FROM AccountEntity a WHERE a.id =? 1")
    public AccountEntity findOne(Long id);
}

Other episodes