Spring JDBC Probleme beim Spaltennamen

8u3631984

Bekanntes Mitglied
Hallo zusammen ich habe ein kleines Spielprojekt mit Spring-data-jdbc erstellt.

Hier meine Klassen
Java:
@Builder(setterPrefix = "with", toBuilder = true)
@Table(name = "PHOTOALBUM")
public record PhotoAlbum(
        @Getter @Id long ID,
        @Getter String name,
        @Getter PhotoItem photoItem) {
}

Java:
@Builder(setterPrefix = "with", toBuilder = true)
@Table(name = "PHOTOITEM")
public record PhotoItem(
                @Getter @Id long ID,
                @Getter @Column(value = "hashvalue") String hashValue) {
}

und mein sql Schema (liegt im resource ordner)
SQL:
Create Table
    PHOTOALBUM (
        ID int generated by default as identity primary key,
        name text
    );

CREATE Table
    PHOTOITEM (
        ID int generated by default as identity primary key,
        photoalbum bigint not null references PHOTOALBUM (id),
        hashvalue text
    )

Die Daten erzeuge ich so :
Java:
            var photoAlbum = PhotoAlbum.builder()
                    .withName("testPhotoAlbum2")
                    .withPhotoItem(photoItem)
                    .build();
            albumRepository.save(photoAlbum);
            albumRepository.findAll().forEach(System.out::println);

Wenn ich meinen Code ausführe bekomme ich folgende Exception :

Java:
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Feld "hashvalue" nicht gefunden
Column "hashvalue" not found; SQL statement:
INSERT INTO "PHOTOITEM" ("PHOTOALBUM", "hashvalue") VALUES (?, ?) [42122-224]

Ich habe schon ein wenig herumprobiert und habe der Spalte per @Column(value = "hashvalue") einen eindeutigen namen gegeben. Aber anscheinend wird dies ignoriert.
Als Datenbank System verwende ich zum Testen H2
So sieht meine applicatiom.properties aus :
Code:
spring.datasource.url=jdbc:h2:mem:myDataDatabase
spring.datasource.username=user
spring.datasource.password=passowrd
spring.datasource.driver-class-name=org.h2.Driver

Hat jemand einen Tipp für mich ?
 
Danke für deinen Hinweis. Aber nach meinem Kenntnissstand, wird dies doch nur bei spring-data-jpa verwendet.
Spring-data-jdbc unterstützt doch keine Entity Annotation

Meine Vermutung ist, dass Sping-data-jdbc mit dem Namen hashValue "Probleme" hat. Bzw. daraus etwas anderes macht
 
Zuletzt bearbeitet:
Ich würde es so schreiben:
Java:
@Builder(setterPrefix = "with", toBuilder = true)
@Table(name = "PHOTOITEM")
public record PhotoItem(
                @Getter @Column("ID") @Id long id,
                @Getter @Column("HASHVALUE") String hashValue) {
}
... also id -> klein und Column("HASHVALUE") -> groß
Ich glaube mal gelesen zu haben, dass H2 per default case sensitive ist - das ist aber nur eine Vermutung
Edit:
In MySQL text columns are case insensitive by default, while in H2 they are case sensitive. However H2 supports case insensitive columns as well. To create the tables with case insensitive texts, append IGNORECASE=TRUE to the database URL (example: jdbc:h2:~/test;IGNORECASE=TRUE).
 

Zurück
Oben