• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Spring / PetClinic - problem z MySQL (z H2 działa dobrze).

Object Storage Arubacloud
+1 głos
151 wizyt
pytanie zadane 7 października 2019 w Java przez reaktywny Nałogowiec (40,990 p.)
edycja 8 października 2019 przez reaktywny

Odpaliłem Springowy przykład - projekt "PetClinic". Działa (z poziomu Intellij IDEA) - wszystko OK, do czasu gdy próbuje użyć MySQL zamiast bazy H2 (projekt dopuszcza obie).

Otrzymuję błąd (wyświetlany na stronie):

could not prepare statement; SQL [select distinct owner0_.id as id1_0_0_, pets1_.id as id1_1_1_, owner0_.first_name as first_na2_0_0_, owner0_.last_name as last_nam3_0_0_, owner0_.address as address4_0_0_, owner0_.city as city5_0_0_, owner0_.telephone as telephon6_0_0_, pets1_.name as name2_1_1_, pets1_.birth_date as birth_da3_1_1_, pets1_.owner_id as owner_id4_1_1_, pets1_.type_id as type_id5_1_1_, pets1_.owner_id as owner_id4_1_0__, pets1_.id as id1_1_0__ from owners owner0_ left outer join pets pets1_ on owner0_.id=pets1_.owner_id where owner0_.last_name like ?]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement

 

Bład w oknie IDE Intellij IDEA:

2019-10-08 00:03:52.197  WARN 1168 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: -5501, SQLState: 42501
2019-10-08 00:03:52.197 ERROR 1168 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : user lacks privilege or object not found: OWNERS in statement [select distinct owner0_.id as id1_0_0_, pets1_.id as id1_1_1_, owner0_.first_name as first_na2_0_0_, owner0_.last_name as last_nam3_0_0_, owner0_.address as address4_0_0_, owner0_.city as city5_0_0_, owner0_.telephone as telephon6_0_0_, pets1_.name as name2_1_1_, pets1_.birth_date as birth_da3_1_1_, pets1_.owner_id as owner_id4_1_1_, pets1_.type_id as type_id5_1_1_, pets1_.owner_id as owner_id4_1_0__, pets1_.id as id1_1_0__ from owners owner0_ left outer join pets pets1_ on owner0_.id=pets1_.owner_id where owner0_.last_name like ?]
2019-10-08 00:03:52.197 ERROR 1168 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [select distinct owner0_.id as id1_0_0_, pets1_.id as id1_1_1_, owner0_.first_name as first_na2_0_0_, owner0_.last_name as last_nam3_0_0_, owner0_.address as address4_0_0_, owner0_.city as city5_0_0_, owner0_.telephone as telephon6_0_0_, pets1_.name as name2_1_1_, pets1_.birth_date as birth_da3_1_1_, pets1_.owner_id as owner_id4_1_1_, pets1_.type_id as type_id5_1_1_, pets1_.owner_id as owner_id4_1_0__, pets1_.id as id1_1_0__ from owners owner0_ left outer join pets pets1_ on owner0_.id=pets1_.owner_id where owner0_.last_name like ?]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement] with root cause

 

 

Mój plik konfiguracyjny (application.properties):

 

# database init, supports mysql too
database=mysql
#spring.datasource.schema=classpath*:db/${database}/schema.sql
#spring.datasource.data=classpath*:db/${database}/data.sql
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/petclinic
jdbc.username=root
jdbc.password=*****************
init-db=false

# Web
spring.thymeleaf.mode=HTML

# JPA
spring.jpa.hibernate.ddl-auto=none
spring.jpa.open-in-view=true

# Hibernate will bootstrap in a separate thread while the rest of your application’s startup processing proceeds in parallel
spring.data.jpa.repositories.bootstrap-mode=deferred

# Internationalization
spring.messages.basename=messages/messages

# Actuator / Management
management.endpoints.web.base-path=/manage
management.endpoints.web.exposure.include=*

# Logging
logging.level.org.springframework=INFO
# logging.level.org.springframework.web=DEBUG
# logging.level.org.springframework.context.annotation=TRACE

# Maximum time static resources should be cached
spring.resources.cache.cachecontrol.max-age=12h

 

Strona projektu:  https://spring-petclinic.github.io/

1 odpowiedź

+2 głosów
odpowiedź 8 października 2019 przez adas94 Nałogowiec (29,200 p.)

Słowo OWNER jest zarezerwowanym tzw "keyword" w mysql. 

https://forums.mysql.com/read.php?101,665004,665004

Stąd też pojawianie się tego błędu tylko dla tej bazy. 

Rozwiązaniem będzie tutaj zmiana nazwy w klasie Owner np za pomocą anotacji @Table(). (Po to aby mechanizm hibernate nie doklejał do generowanego zapytania słowa Owner)

komentarz 8 października 2019 przez reaktywny Nałogowiec (40,990 p.)
edycja 8 października 2019 przez reaktywny

Miałeś racje! DZIĘKI!

Nie obyło się też bez wprowadzenia:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/petclinic?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false

Podobne pytania

0 głosów
1 odpowiedź 1,988 wizyt
pytanie zadane 4 lutego 2019 w Java przez varespol Użytkownik (710 p.)
0 głosów
1 odpowiedź 823 wizyt
0 głosów
1 odpowiedź 498 wizyt
pytanie zadane 11 stycznia 2019 w Java przez Tomek Reda Obywatel (1,110 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...