Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Navry
Člen
Avatar
Navry:6.12.2020 13:59

Po spuštění Spring Boot aplikace se nevytvoří tabulky v databázi na základě definovaných entit.
Divné je to že při prvním spuštění aplikace se vytvořily, ale když jsem pak přidal další entity tak už se nevytvořily.

Zkusil jsem: Moje konfigurace databáze:

1. application.pro­perties

spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL10Dialect
spring.jpa.show-sql=true

2. Java konfigurace

@Bean
public DataSource getDataSource() {
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
    dataSourceBuilder.driverClassName("org.postgresql.Driver");
    dataSourceBuilder.url("jdbc:postgresql://localhost:5432/shl");
    dataSourceBuilder.username("postgres");
    dataSourceBuilder.password("postgres");
    return dataSourceBuilder.build();
}

Databáze funguje, jsem připojený přez PgAdmin, selekty fungují.

aplikaci spouštím přez Intelli IDEU přez třídu s main()

Log po spuštění:

2020-12-06 13:57:11.076  INFO 2939493 --- [           main] c.p.shl.SimpleHomeLibraryApplication     : Starting SimpleHomeLibraryApplication using Java 11.0.9.1 on dell-latitude-5511 with PID 2939493 (/home/ptnavratil/Projects/shl/build/classes/java/main started by ptnavratil in /home/ptnavratil/Projects/shl)
2020-12-06 13:57:11.079  INFO 2939493 --- [           main] c.p.shl.SimpleHomeLibraryApplication     : No active profile set, falling back to default profiles: default
2020-12-06 13:57:11.890  INFO 2939493 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFERRED mode.
2020-12-06 13:57:11.902  INFO 2939493 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 6 ms. Found 0 JPA repository interfaces.
2020-12-06 13:57:12.318  INFO 2939493 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8001 (http)
2020-12-06 13:57:12.328  INFO 2939493 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-12-06 13:57:12.328  INFO 2939493 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.39]
2020-12-06 13:57:12.410  INFO 2939493 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-12-06 13:57:12.411  INFO 2939493 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1090 ms
2020-12-06 13:57:12.558  INFO 2939493 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-12-06 13:57:12.591  INFO 2939493 --- [         task-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-12-06 13:57:12.614  WARN 2939493 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2020-12-06 13:57:12.634  INFO 2939493 --- [         task-1] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.23.Final
2020-12-06 13:57:12.752  INFO 2939493 --- [         task-1] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2020-12-06 13:57:12.861  INFO 2939493 --- [         task-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-12-06 13:57:12.951  INFO 2939493 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8001 (http) with context path ''
2020-12-06 13:57:12.953  INFO 2939493 --- [           main] DeferredRepositoryInitializationListener : Triggering deferred initialization of Spring Data repositories…
2020-12-06 13:57:12.954  INFO 2939493 --- [           main] DeferredRepositoryInitializationListener : Spring Data repositories initialized!
2020-12-06 13:57:12.964  INFO 2939493 --- [           main] c.p.shl.SimpleHomeLibraryApplication     : Started SimpleHomeLibraryApplication in 2.325 seconds (JVM running for 2.659)
2020-12-06 13:57:13.096  INFO 2939493 --- [         task-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-12-06 13:57:13.113  INFO 2939493 --- [         task-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL10Dialect
 
Odpovědět
6.12.2020 13:59
Avatar
Odpovídá na Navry
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?

Nahoru Odpovědět
6.12.2020 14:51
/* I am not sure why this works but it fixes the problem */
Avatar
Navry
Člen
Avatar
Odpovídá na Matúš Olejník
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.

 
Nahoru Odpovědět
6.12.2020 15:00
Avatar
Odpovídá na Navry
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
Nahoru Odpovědět
6.12.2020 15:07
/* I am not sure why this works but it fixes the problem */
Avatar
Navry
Člen
Avatar
Odpovídá na Matúš Olejník
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.

 
Nahoru Odpovědět
6.12.2020 15:21
Avatar
Odpovídá na Navry
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ť :D tak môžeš celé skopčíť a použiť nižšie odkaz
https://www.itnetwork.cz/dev-lighter

Nahoru Odpovědět
6.12.2020 15:30
/* I am not sure why this works but it fixes the problem */
Avatar
Navry
Člen
Avatar
Odpovídá na Matúš Olejník
Navry:6.12.2020 15:46

dal jsem ten log do toho Dev-lighter, ale asi to nějak nefunguje.

 
Nahoru Odpovědět
6.12.2020 15:46
Avatar
Odpovídá na Navry
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.

Nahoru Odpovědět
6.12.2020 15:49
/* I am not sure why this works but it fixes the problem */
Avatar
Navry
Člen
Avatar
Odpovídá na Matúš Olejník
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é :-)

 
Nahoru Odpovědět
6.12.2020 15:51
Avatar
Odpovídá na Navry
Matúš Olejník:6.12.2020 15:53

Tak potom neviem :/ mne to funguje tak môžeš dať niekde txt súbor a zazdielať.

Nahoru Odpovědět
6.12.2020 15:53
/* I am not sure why this works but it fixes the problem */
Avatar
Navry
Člen
Avatar
Navry:6.12.2020 15:54

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
 
Nahoru Odpovědět
6.12.2020 15:54
Avatar
Odpovídá na Navry
Matúš Olejník:6.12.2020 16:52

Hmm sakra :D zrejme nám uniká nejaká blbosť :D

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 @SpringBootAp­plication 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)

Editováno 6.12.2020 16:53
Nahoru Odpovědět
6.12.2020 16:52
/* I am not sure why this works but it fixes the problem */
Avatar
Navry
Člen
Avatar
Odpovídá na Matúš Olejník
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/com­pile "

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'
 
Nahoru Odpovědět
9.12.2020 16:40
Avatar
Navry
Člen
Avatar
Odpovídá na Matúš Olejník
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. :-/

 
Nahoru Odpovědět
10.12.2020 17:02
Avatar
Navry
Člen
Avatar
Odpovídá na Matúš Olejník
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.Map­pingException.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
10.12.2020 17:38
Avatar
Odpovídá na Navry
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 :D 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 :D

Editováno 10.12.2020 21:38
Nahoru Odpovědět
10.12.2020 21:38
/* I am not sure why this works but it fixes the problem */
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.