Hei,

Problemet her er egentlig ikke relatert til SQL, men til HQL (Hibernate Query Language). Hibernate bryr seg om datatyper, men SQL gjør ikke det på samme måte.

Egentlig er det slik at det er riktig at feilen oppstår, slik den gjør med PostgreSQL. Det at det ikke skjer i H2 er det som er rart. Det kan være at H2 og hibernate gjør noe galt som PostgreSQL og hibernate ikke gjør galt. Det er også grunnen at dette ikke er blitt oppdaget, da CI benytter seg utelukkende av H2.

Grunnen dette oppsto er at vi byttet fra datatype varchar(32) på systemID feltet til datatype UUID. Da må vi sørge for at alle spørringer bruker samme datatype. Det er også mulige å _caste_ i HQL.

Det som forvirrer meg litt her er at H2 støtter UUID datatypen også (https://www.h2database.com/html/datatypes.html#uuid_type). Feilen burde oppstått uansett.

Thomas

Fra: Petter Reinholdtsen <pere@hungry.com>
Sendt: fredag 25. april 2025 11:26
Til: nikita-noark@nuug.no <nikita-noark@nuug.no>
Emne: [patch] Fiks DELETE med PostgreSQL som database
 

Basert på innspill og observasjoner fra Thomas etter at jeg oppdaget
problemer med DELETE i runtest mot UiOs PostgreSQL-baserte instans, så
har jeg nettopp testet følgende endring og kan bekrefte at det løste
problemet.

diff --git a/src/main/java/app/service/noark5/NoarkService.java b/src/main/java/app/service/noark5/NoarkService.java
index 7bbc53e45..37df092e7 100644
--- a/src/main/java/app/service/noark5/NoarkService.java
+++ b/src/main/java/app/service/noark5/NoarkService.java
@@ -157,7 +157,7 @@ public class NoarkService
     protected void disassociateForeignKeys(
             SystemIdEntity entity, String deleteString) {
         Query query = entityManager.createNativeQuery(deleteString);
-        query.setParameter(ID, entity.getSystemIdAsString());
+        query.setParameter(ID, entity.getSystemId());
         query.executeUpdate();
     }
 

Hvis det i tillegg er riktig løsning, så foreslår jeg at den tas inn i
master.

Jeg forstår riktignok ikke helt hvorfor PostgreSQL ikke liker en UUID
som string, og hvorfor dette løser noe, da min forståelse er at SQL-en
er lik og burde tolkes på samme vis, så lenge strengen faktisk
representerer en UUID.

--
Vennlig hilsen
Petter Reinholdtsen
_______________________________________________
nikita-noark mailing list -- nikita-noark@nuug.no
To unsubscribe send an email to nikita-noark-leave@nuug.no