вернуть ноль в спящем режиме 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()
}