#java #spring #hibernate #jpa
#java #spring #спящий режим #jpa
Вопрос:
У меня есть внешняя база данных, из которой я хочу запрашивать данные через requestmapping в Spring. Я настроил свой файл application.properties следующим образом:
# ===============================
# = DATA SOURCE
# ===============================
# Set here configurations for the database connection
# Connection url for the database "testdb"
# (I made up the hosting address for security reasons)
spring.datasource.url=jdbc:mysql://23.119.144.321:3306/testdb
# Username and password
spring.datasource.username=root
spring.datasource.password=root
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
# ===============================
# = JPA / HIBERNATE
# ===============================
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
ПРОБЛЕМА: Когда я пытаюсь запросить список пользователей из requestmapping i UserController, я просто получаю пустой список. Также я попытался извлечь одного пользователя из базы данных с помощью метода gettingUser в контроллере, но Spring просто возвращает пустую белую страницу вместо данных в формате json. Я не знаю, где возникает проблема. У меня есть 3 записи в моей пользовательской таблице в БД (поэтому БД не пуста).
РЕШЕНИЕ: СМОТРИТЕ ПРОВЕРЕННЫЙ ОТВЕТ.
Комментарии:
1. у вас должно быть какое-то исключение в журнале консоли?
2. Нет, никаких ошибок и исключений, только ИНФОРМАЦИОННЫЕ сообщения об ASTQueryTranslatorFactory и DispatcherServlet.
3. Вы уверены, что подключаетесь к правильной схеме? поскольку вполне возможно, что Spring подключается к другой схеме и создает таблицы с нуля из-за имеющейся у вас конфигурации ddl.
4. Как я могу проверить, подключаюсь ли я к правильной схеме или нет?
5. Сначала убедитесь, что в ваших журналах отображается строка подключения, которую вы определили в своих свойствах, затем войдите в базу данных либо с помощью командной строки, либо mysql workbench, используя те же данные о подключении. Перечислите и изучите все базы данных, созданные в этом экземпляре, и просмотрите список всех доступных таблиц. Вы должны найти таблицы для своих объектов только в testdb.
Ответ №1:
добавьте следующее в свой файл application.properties:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
Комментарии:
1. Во-первых, что это делает? Во-вторых, я обнаружил, что Spring устанавливает соединение с БД, но он видит мой пользовательский класс как user без заглавной буквы U. Но в моей БД у меня есть тот, который мне нужен с большой буквы U. Итак, вы знаете способ заставить spring jpa принять мой пользовательский класс как User (заглавная буква U), а не как «user»?
2. да, эта строка гарантирует, что JPA использует точные имена для объектов, которые вы указываете при генерации запросов. Добавление этой строки должно устранить вашу проблему
Ответ №2:
Пользователь — это зарезервированное ключевое слово в mysql. Вероятно, это вызывает ошибку, можете ли вы попробовать изменить имя вашей таблицы сущностей. Затем сохраните нового пользователя в своем приложении и извлеките результирующие данные с помощью endpoint.