web-dev-qa-db-ja.com

CrudRepository#findOneメソッドが見つかりません

私は自分のプロジェクトでSpring 5を使用しています。今日まで利用可能な方法がありました CrudRepository#findOne

しかし、最新のスナップショットをダウンロードした後、それは突然消えました!この方法が現在利用できないという言及はありますか?

私の依存関係リスト:

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

更新:

このメソッドはCrudRepository#findByIdに置き換えられたようです

73
Andrii Abramov

DATACMNS-944 に関連付けられている このコミット を参照してください。以下の名前が変更されました。

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

findByIdfindOneの正確な置き換えではないことに注意してください。Optionalの代わりにnullを返します。

新しいJavaのことにあまり慣れていないので、理解するのに少し時間がかかりましたが、これはfindByIdの動作をfindOneに変更します。

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

私たちは古いfindOne()メソッドの何百もの用法を持っていました。巨大なリファクタリングに着手するのではなく、次の中間インターフェースを作成し、JpaRepositoryを直接拡張するのではなく、リポジトリに拡張させました。

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

実用的な変換

昔ながらの方法:

Entity aThing = repository.findOne(1L);

新しい方法:

Optional<Entity> aThing = repository.findById(1L);
4
Do Nhu Vy