私は自分のプロジェクトで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
に置き換えられたようです
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(…) ║
╚═════════════════════╩═══════════════════════╝
findById
はfindOne
の正確な置き換えではないことに注意してください。Optional
の代わりにnull
を返します。
新しいJavaのことにあまり慣れていないので、理解するのに少し時間がかかりましたが、これはfindById
の動作をfindOne
に変更します。
return rep.findById(id).orElse(null);
私たちは古いfindOne()
メソッドの何百もの用法を持っていました。巨大なリファクタリングに着手するのではなく、次の中間インターフェースを作成し、JpaRepository
を直接拡張するのではなく、リポジトリに拡張させました。
@NoRepositoryBean
public interface BaseJpaRepository<T, ID> extends JpaRepository<T, ID> {
default T findOne(ID id) {
return (T) findById(id).orElse(null);
}
}
実用的な変換
昔ながらの方法:
Entity aThing = repository.findOne(1L);
新しい方法:
Optional<Entity> aThing = repository.findById(1L);