Diskuze: Spring Boot/JPA problém s vytvářením tabulek
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Matúš Olejník:6.12.2020 14:51
Ahoj, aké presne zmeny si urobil? Len pridal novú entitu a očakávaš novú tabuľku?
Projekt si zbuildoval úspešne?
Nezabudol si napr. na @Entity anotáciu?
Navry:6.12.2020 15:00
Nevím jaké změny přesně jsem udělal, udělal jsem první entitu zkusil to, tabulka se vytvořila a pak jsem najednou přidělal dalších cca 10 entit a pak to zkusil a už se nevytvořily. Anotace všude jsou, build projektu je v pořádku.
Matúš Olejník:6.12.2020 15:07
Hmm toto sa mi zatiaľ nestalo, hoci "update" nepoužívam takmer vôbec nakoľko má nevýhody najmä pre produkčné prostredie. Pri najhoršom vymaž aj tie prvotné tabuľky čo ti vytvorilo a skús znova či ti vytvorí aj nové alebo namiesto toho DataSource beanu skús použiť properties
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/shl
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.hibernate.ddl-auto=update
Navry:6.12.2020 15:21
Tak existující tabulku jsem smazal a už se znovu nevytvořila. Dal jsem pryč Beanu a dal konfiguraci do properties a také to nepomohlo.
Matúš Olejník:6.12.2020 15:30
Keď dáš do properties
logging.level.root=debug
Nevypíše niečo zvláštne? Bude toho dosť vypisovať tak môžeš celé skopčíť a
použiť nižšie odkaz
https://www.itnetwork.cz/dev-lighter
Navry:6.12.2020 15:46
dal jsem ten log do toho Dev-lighter, ale asi to nějak nefunguje.
Matúš Olejník:6.12.2020 15:49
Musíš teraz ísť na tú stránku https://www.itnetwork.cz/dev-lighter vybrať to čo si pridal a vložiť sem odkaz.
Navry:6.12.2020 15:51
odkaz: Log
aplikace
jenže když to otevřu tak je tam jen prázdná stránka, a když dám
upravit.. tak to samé
Matúš Olejník:6.12.2020 15:53
Tak potom neviem :/ mne to funguje tak môžeš dať niekde txt súbor a zazdielať.
Zajímavé věci z logu:
1.
2020-12-06 15:38:46.228 DEBUG 2446305 --- [ main] o.a.catalina.core.AprLifecycleListener : The Apache Tomcat Native library could not be found using names [tcnative-1, libtcnative-1] on the java.library.path [/usr/java/packages/lib:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib]. The errors reported were [Can't load library: /home/ptnavratil/Projects/shl/bin/libtcnative-1.so, Can't load library: /home/ptnavratil/Projects/shl/bin/liblibtcnative-1.so, no tcnative-1 in java.library.path: [/usr/java/packages/lib, /usr/lib/x86_64-linux-gnu/jni, /lib/x86_64-linux-gnu, /usr/lib/x86_64-linux-gnu, /usr/lib/jni, /lib, /usr/lib], no libtcnative-1 in java.library.path: [/usr/java/packages/lib, /usr/lib/x86_64-linux-gnu/jni, /lib/x86_64-linux-gnu, /usr/lib/x86_64-linux-gnu, /usr/lib/jni, /lib, /usr/lib]]
org.apache.tomcat.jni.LibraryNotFoundError: Can't load library: /home/ptnavratil/Projects/shl/bin/libtcnative-1.so, Can't load library: /home/ptnavratil/Projects/shl/bin/liblibtcnative-1.so, no tcnative-1 in java.library.path: [/usr/java/packages/lib, /usr/lib/x86_64-linux-gnu/jni, /lib/x86_64-linux-gnu, /usr/lib/x86_64-linux-gnu, /usr/lib/jni, /lib, /usr/lib], no libtcnative-1 in java.library.path: [/usr/java/packages/lib, /usr/lib/x86_64-linux-gnu/jni, /lib/x86_64-linux-gnu, /usr/lib/x86_64-linux-gnu, /usr/lib/jni, /lib, /usr/lib]
at org.apache.tomcat.jni.Library.<init>(Library.java:102) ~[tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.tomcat.jni.Library.initialize(Library.java:206) ~[tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.catalina.core.AprLifecycleListener.init(AprLifecycleListener.java:193) ~[tomcat-embed-core-9.0.39.jar:9.0.39]
at org.apache.catalina.core.AprLifecycleListener.isAprAvailable(AprLifecycleListener.java:102) ~[tomcat-embed-core-9.0.39.jar:9.0.39]
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getDefaultLifecycleListeners(TomcatServletWebServerFactory.java:174) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.<init>(TomcatServletWebServerFactory.java:121) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat.tomcatServletWebServerFactory(ServletWebServerFactoryConfiguration.java:76) ~[spring-boot-autoconfigure-2.4.0.jar:2.4.0]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1336) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1179) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.1.jar:5.3.1]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory(ServletWebServerApplicationContext.java:216) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:179) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:159) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:582) ~[spring-context-5.3.1.jar:5.3.1]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309) ~[spring-boot-2.4.0.jar:2.4.0]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298) ~[spring-boot-2.4.0.jar:2.4.0]
at cz.ptnavratil.shl.SimpleHomeLibraryApplication.main(SimpleHomeLibraryApplication.java:10) ~[main/:na]
2.
2020-12-06 15:38:46.752 DEBUG 2446305 --- [ task-1] o.hibernate.jpa.internal.util.LogHelper : PersistenceUnitInfo [
name: default
persistence provider classname: null
classloader: jdk.internal.loader.ClassLoaders$AppClassLoader@55054057
excludeUnlistedClasses: true
JTA datasource: null
Non JTA datasource: HikariDataSource (null)
Transaction type: RESOURCE_LOCAL
PU root URL: file:/home/ptnavratil/Projects/shl/build/classes/java/main/
Shared Cache Mode: UNSPECIFIED
Validation Mode: AUTO
Jar files URLs []
Managed classes names [
cz.ptnavratil.shl.entity.Book
cz.ptnavratil.shl.entity.BookBinding
cz.ptnavratil.shl.entity.BookSeries
cz.ptnavratil.shl.entity.ReadRecord
cz.ptnavratil.shl.entity.User
cz.ptnavratil.shl.entity.Writer
cz.ptnavratil.shl.entity.base.DateInfoBase
cz.ptnavratil.shl.entity.key.BookSeriesWriterKey
cz.ptnavratil.shl.entity.key.BookWriterKey
cz.ptnavratil.shl.entity.relation.BookSeriesWriterRelation
cz.ptnavratil.shl.entity.relation.BookWriterRelation]
Mapping files names []
Properties []
3.
2020-12-06 15:38:47.446 DEBUG 2446305 --- [ task-1] o.h.e.j.e.i.JdbcEnvironmentInitiator : Database ->
name : PostgreSQL
version : 12.5 (Ubuntu 12.5-0ubuntu0.20.04.1)
major : 12
minor : 5
2020-12-06 15:38:47.446 DEBUG 2446305 --- [ task-1] o.h.e.j.e.i.JdbcEnvironmentInitiator : Driver ->
name : PostgreSQL JDBC Driver
version : 42.2.18
major : 42
minor : 2
Matúš Olejník:6.12.2020 16:52
Hmm sakra zrejme nám
uniká nejaká blbosť
Ktorá tabuľka sa ti pôvodne dokázala vytvoriť? A nevieš čo si približne zmenil okrem pridaní tých ďalších entít?
Keďže tie entity vypisuje v "Managed classes names" tak ich zrejme dokázal nájsť, ale pre 100% istotu skús v triede kde máš main a anotáciu @SpringBootApplication pridať aj anotáciu @EntityScan("cz.ptnavratil.shl.entity"), prípadne v akom package máš tú triedu kde máš main?
Viem, že kedysi dávno mi spring tiež nechcel vytvoriť tabuľky dokým som nemal aspoň jedno Repository alebo nejako proste nepracoval s EntityManagerom, tak nemal si tam vtedy aj nejaký kód kde si robil s tou entitou pre ktorú ti aj vytvorilo tabuľku? Napr. tú @Repository triedu si tam možno mal a potom ju vymazal?
Mohol by si hodiť aj kúsok kódu entity pre ktorú sa tabuľka vytvorila a kúsok tej pre ktorú sa nevytvorila (aj s importami)
Navry:9.12.2020 16:40
Vytvořil jsem si obdobný projekt, v něm dvě entity a vytvořili se. Po spuštění v logu jsou v druhém projekty téměř stejné řadky jako v tom originále, ale jsou tam navíc 2 řadky:
2020-12-09 16:19:22.961 INFO 1339628 --- [ task-1] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-12-09 16:19:22.967 INFO 1339628 --- [ task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default
Možná už vím v čem je problém, ale proč?
V tom originál projektu v build.gradle je řádek šedivej
sourceCompatibility = '11'
a když na něj najedu myší tak mi IDEA zobrazí "Assignment is not
used"
proč??
a všechny dependence jsou tečkovaně podržený a hlásej "No candidates found for method call implementation/compile "
ten druhý projekt nic takového nemá
Oba projekty jsou tvořený přez start.spring.io, stejná verze springu, javy (11), oba dva v gradlu
Ještě jedna maličkost:
u druhého projektu jsem PostgreSQL driver přidal při vytváření projektu na
tom webu a v dependencích je:
runtimeOnly 'org.postgresql:postgresql'
u originálu jsem to přidával ručně z mvnrepository.com a tam odtud jsem zkopíroval
compile group: 'org.postgresql', name: 'postgresql', version: '42.2.18'
Navry:10.12.2020 17:02
Tak jsem si vytvořil úplně nový projekt, zkopíroval do něj package s
těma entitama, spustil a tabulky se nevytvořili.
log po startu projektu vždycky skončí řádkem
020-12-10 16:56:06.853 INFO 217386 --- [ task-1] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL10Dialect
Kdybych měl chybu v nějaký definici těch entit tak bych čekal že mi to vyhodí nějaký Hibernate případně PostgreSql Exception do logu. :-/
Navry:10.12.2020 17:38
Tak vyřešeno, u jedné entity mě u
@JoinColumn
chybělo
@ManyToOne
Akorát vůbec nerozumím proč mě to nevypsalo tu Exception do logu.
Vždycky jsem Spring Boot aplikace spouštěl přez "MainClass.main()" a
všechny důležitý vyjímky mě to vypsalo do logu.
Tentokrát jsem to objevil tak, že jsem v terminálu spustil:
gradle bootRun
a tam už mě to normálně vyhodilo hibernate.MappingException.
+5 Zkušeností

Matúš Olejník:10.12.2020 21:38
Wow zaujímavé, takéto niečo sa mi ešte nestalo takže ďakujem, že si
sa podelil aj o riešenie S
gradle inak vôbec nerobím, akurát niekedy ak pre Android niečo robím, inak
používam Maven takže s tými chybami by som tiež skôr len hádal.
Sorry že som nepísal ale kódil som dve zadania
Zobrazeno 16 zpráv z 16.