Почему нет соединения с моей внешней базой данных (Spring / JpaRepository)?

#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.