вернуть ноль в спящем режиме Quarkus или нет результата

Я работаю над проектом, в котором использую ORM Quarkus Hibernate и выполняю запросы, подобные приведенному ниже коду. Каждый раз, когда запросу не удается найти объект, он выдает ошибку 500:

      fun getByEmail(email: String): MutableList<Any?> {
    return try {
    em.createQuery("SELECT u FROM User u WHERE u.email = :email").setParameter("email", email).resultList
    } catch (e: Throwable) {
        mutableListOf()
    }
}

Очень раздражает использование try-catch каждый раз, когда используется EM.

Мой вопрос: есть ли способ отключить NoResultError и вместо этого вернуть значение null или, в данном случае, пустой список?

Я пытался отключить ошибку в моем application.properties, но это не сработало.

quarkus.hibernate-orm.returning-null-on-no-result=true

      <dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-hibernate-orm-panache-kotlin</artifactId>
</dependency>

<dependency>
     <groupId>io.quarkus</groupId>
     <artifactId>quarkus-jdbc-mariadb</artifactId>
</dependency>

1 ответ

Вы не должны получать сообщение при звонкеgetResultList(); если да, откройте отчет об ошибке в Quarkus с помощью репродуктора.

Я подозреваю, что ваш реальный код используетgetSingleResult()вместо? Это единственный метод, который выдаетNoResultExceptionв кодовой базе Hibernate ORM.

Если да, просто используйте Hibernate ORM.Sessionчтобы создать свой запрос, и вы сможете использоватьuniqueResult()илиuniqueResultOptional().

Не знаю, как это сделать в Котлине, но думаю, что-то подобное может сработать?

      fun getByEmail(email: String): Any? {
    return session.createQuery("SELECT u FROM User u WHERE u.email = :email").setParameter("email", email).uniqueResult()
}

РЕДАКТИРОВАТЬ: и было бы еще проще, если бы вы на самом деле использовали Panache, что-то вроде:

      fun getByEmail(email: String): User? {
    return User.find("email", email).firstResult()
}
Другие вопросы по тегам