Hibernate Search требуется javax.persistence.EntityManager

Я пытаюсь создать тестовое приложение с помощью Hibernate Search. У меня есть репозиторий заметок, который расширить SimpleJpaRepository с обязательным параметром jakarta.persistence.EntityManager. Но когда я пытаюсь создать сеанс поиска Search.session(entityManager), я получаю сообщение об ошибке, что для Search.session() требуется javax.persistence.EntityManager. Итак, вопрос в том, как я могу создать сеанс поиска с помощью jakarta.persistence.EntityManager?

ПримечаниеРепозиторий:

@Repository
@Transactional
class NoteRepositoryImpl(
    private val entityManager: EntityManager,
) : SimpleJpaRepository<NoteEntity, Long>(NoteEntity::class.java, entityManager), NoteRepository {

    override fun search(query: String): List<NoteEntity> {
        val session = Search.session(entityManager)

        val result = session.search(NoteEntity::class.java)
            .where { it.match().fields("title", "tag", "content").matching(query) }
            .fetch(0, 100)
        return result.hits().map { it as NoteEntity }
    }
}

Файл Gradle:

plugins {
    id 'org.springframework.boot' version '3.0.4'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'org.jetbrains.kotlin.jvm' version '1.7.22'
    id 'org.jetbrains.kotlin.plugin.spring' version '1.7.22'
    id "org.jetbrains.kotlin.plugin.jpa" version "1.7.22"
    id 'org.jetbrains.kotlin.plugin.allopen' version '1.7.22'
}

allOpen {
    annotation("jakarta.persistence.Entity")
    annotation("jakarta.persistence.Embeddable")
    annotation("jakarta.persistence.MappedSuperclass")
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'

    implementation 'org.hibernate.search:hibernate-search-mapper-orm:6.1.8.Final'
    implementation 'org.hibernate.search:hibernate-search-backend-lucene:6.1.8.Final'

    runtimeOnly 'org.postgresql:postgresql'

    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.withType(KotlinCompile) {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = '17'
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы используете Spring Boot 3, основанный на jakarta.*, вам нужно будет использовать jakarta версию orm-mapper:

implementation 'org.hibernate.search:hibernate-search-mapper-orm-jakarta:6.1.8.Final'

Другие вопросы по теме