Отсутствует метод 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
Ответы
Ответ 1
Пожалуйста, смотрите 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(…) ║
╚═════════════════════╩═══════════════════════╝
Ответ 2
Обратите внимание, что findById
не является точной заменой findOne
, он возвращает Optional
вместо null
.
Будучи не очень знакомым с новыми Java-вещами, мне потребовалось немного времени, чтобы разобраться, но это превращает поведение findById
в findOne
:
return rep.findById(id).orElse(null);
Ответ 3
У нас было много сотен использований старого findOne()
. Вместо того чтобы приступить к гигантскому рефакторингу, мы в итоге создали следующий промежуточный интерфейс, и наши репозитории расширили его вместо JpaRepository
расширения JpaRepository
@NoRepositoryBean
public interface BaseJpaRepository<T, ID> extends JpaRepository<T, ID> {
default T findOne(ID id) {
return (T) findById(id).orElse(null);
}
}
Ответ 4
Прагматическое преобразование
Старый способ:
Entity aThing = repository.findOne(1L);
Новый способ:
Optional<Entity> aThing = repository.findById(1L);
Ответ 5
public Topic getTopic (String id) {
вернуть topicResp.findById(id).orElse(null); }
Это работает для меня.
Ответ 6
findOne() - это старый метод, он обновляется функцией findById();
Ранее мы использовали:
Customer customer = customerRepository.findOne(id);
В настоящее время мы используем это:
Customer customer = customerRepository.findById(id).orElse(null);
это решит вашу проблему.