Я разрабатываю приложение с 3 серверами для развертывания: dev, home prod. В базе данных есть просмотры из других баз данных. В процессе разработки у нас есть контроль над нашей БД, и мы можем создать представление и вставить некоторые данные для тестирования. В разработке и производстве мы не контролируем БД. Итак, некоторые представления еще не созданы.
Я должен любить это
public class myDTO {
Long id;
Double quantity;
Map<String, Double> loadTypes; // come from view
}
У меня есть метод findAll в классе @Transactional, который получает loadTypes из БД, но поскольку мой класс - @Transactional, когда я пытаюсь получить доступ к таблице, я получил ошибку 500, а myDTO не возвращается, я хочу вернуть остальную часть DTO даже при просмотре который мне нужен для получения loadTypes, не существует. Есть ли способ сделать это?
Я получаю эту ошибку
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:526)
@Kayaman Я знаю, это действительно странно, но поскольку id и quantity должны появляться на экране даже без loadTypes, следует ли мне разделить DTO? Наш руководитель хочет вернуть данные, даже если представление еще не существует
DTO - это не ваша проблема, а ваша сущность. Если вы пишете код, который работает по-разному в зависимости от схемы базы данных (что является действительно плохой идеей для начала), вам придется выполнять пользовательскую загрузку и другие вещи. Hibernate предполагает, что вы знаете базу данных, с которой работаете, и ничего из того, что вы собираетесь делать, «загрузите это, если она есть».
В конечном итоге представление будет создано @Kayaman. Но займет некоторое время, нам нужно открыть заявку, ИТ-команда клиента обновит БД. Код работает нормально, но из-за этого наш руководитель не хочет видеть ответ 500. Я пытаюсь что-то сделать только до тех пор, пока это представление не будет создано в hom и production.
Что ж, надеюсь, вы понимаете, что делаете что-то ужасное. Неправильно иметь базу данных в неопределенном состоянии, что бы ни говорил «лидер». Вероятно, вам придется работать с собственными запросами и выполнять всевозможные частичные загрузки. Код в вашем примере не показывает вашу сущность, то, как вы ее загружаете, или что-то еще относящееся, поэтому решить вашу непосредственную проблему сложно. Я рекомендую прочитать много материалов по Hibernate, так как вы, кажется, не очень разбираетесь в этом.




Даже если бы вы нашли способ сделать это, это было бы ужасно. Ваша проблема в том, что вы пытаетесь использовать отсутствующее представление. Не делай этого. Зачем вашему коду пытаться использовать несуществующие ресурсы?