ERROR: null value in column "id" of relation "log" violates not-null

ERROR: null value in column "id" of relation "log" violates not-null
2022-07-28T12:14:27+02:00
2022-07-28T14:28:34+02:00
2022-10-15T21:21:09+02:00
O.AdamB
Ez az classom:
package com.example.SMS.enitties; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.*; import javax.persistence.Entity; import javax.persistence.Table; @AllArgsConstructor @Getter @Setter @NoArgsConstructor @Entity @Table public class log { @Id @SequenceGenerator(name = "log_generator", sequenceName = "log_sequence", allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "log_generator") @Column(name = "id", updatable = false, nullable = false) private Long id; @Column(columnDefinition = "TEXT") private String message; @Column(name = "log_type") private String logType; }
És itt próbálom be logolni az adatbázisba, de valami miatt mindig hibára fut.
package com.example.SMS.enitties; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.persistence.*; import javax.persistence.Entity; import javax.persistence.Table; @AllArgsConstructor @Getter @Setter @NoArgsConstructor @Entity @Table public class log { @Id @SequenceGenerator(name = "log_generator", sequenceName = "log_sequence", allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "log_generator") @Column(name = "id", updatable = false, nullable = false) private Long id; @Column(columnDefinition = "TEXT") private String message; @Column(name = "log_type") private String logType; }
És még tartozik hozzá egy properties fájl is
log4j.rootLogger = DEBUG,db log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender log4j.appender.db.driver=org.postgresql.Driver log4j.appender.db.URL=jdbc:postgresql://localhost:5432/SMS log4j.appender.db.user=postgres log4j.appender.db.password=2022ADtitanic log4j.appender.db.layout=org.apache.log4j.PatternLayout log4j.appender.db.sql=insert into log(log_type, message) values('%p', '%m')

Valaki tudna segíteni, hogy milyen irányba induljak el?
Mutasd a teljes hozzászólást!

  • Én a hibaüzenet értelmezésével kezdeném: Megpróbáltál beszúrni egy sort a táblába, úgy hogy a kötelező ID mezőnek nem adtál értéket.

    Az szép és jó dolog hogy neked van egy JPA-d aminek elmagyaráztad hogy az "id" mezőt szekvenciából töltse fel, csak erről a Log4J nem tud semmit, mivel ő közvetlenül a JDBC-vel dolgozik és a JPA-val nem foglalkozik. Ő lefuttatja az insert utasítást amit adtál neki, nem is tudja hogy "id" mező is van a táblában.

    El kéne dönteni hogy akkor a JPA-n keresztül akarod vinni a logok mentését, vagy sem.
    * Ha igen, akkor valahogy meg kell oldani hogy a log implementáció JPA entitásokat hozzon létre és mentsen el. Személy szerint nem tartom jó ötletnek, a logolást nem szeretik az emberek felesleges absztrakciós rétegekkel lassítani.
    * Ha nem, akkor az adott adatbázis (esetedben Postgres) lehetőségeit kell megnézni, támogat-e autoincrement típusú oszlopot vagy egyéb automata generálási lehetőséget. Ha ilyen nincs, akkor a Log4J konfigjában kell úgy átírnod az insert utasítást, hogy hivatkozzon szekvenciára, vagy annak megfelelő Postgres-beli eszközre.

    (Az is játszik még esetleg, hogy elengeded az "id" oszlopot és olyan táblád lesz, aminek nincs kulcsa. Elvben működik, de a gyakorlatban nehezen fogsz benne bármit is megtalálni.)

    Én mondjuk átgondolnám az adatbázisba logolást is úgy általában. Jóval nagyobb szokott az overhead-je lenni mintha lokális fájlba írnád a logot. Ha pedig később keresni kell benne vagy analizálni, akkor arra jobban megfelel egy erre kitalált megoldás (pl. egy ELK stack), mintha relációs adatbázisban állnál neki select-ezni.
    Mutasd a teljes hozzászólást!
  • Sikerült szerencsére megoldani
    Mutasd a teljes hozzászólást!
  • Akkor tedd meg azt a többi fórumozó kedvéért, hogy leírod a megoldást, aztán a saját hozzászólásodat elfogadhatod megoldásként. A Tudástár elvileg nem csak arra lenne hivatott, hogy a jelenlegi problémákat megoldja, hanem hogy a jövőben segítsen másoknak, akik ugyanilyen gonddal küzdenek. Ez utóbbit funkciót nem tudja beteljesíteni, ha csak azzal zárod le a témát hogy "most már megy"
    Mutasd a teljes hozzászólást!
  • @Column(name = "id",columnDefinition = "SERIAL " ) private Long id;
    Megadtam, hogy az oszlop SERIAL adatipusú legyen
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd