Skip to content

Commit

Permalink
OK-798 Wrapataan FunktioKutsu jsonb-kenttä
Browse files Browse the repository at this point in the history
  - Hibernate kilahtaa jos jsonb-muotoisen kentän tyyppi on samalla
    jpa entiteetti kuten FunktioKutsu tällä hetkellä on
  - Varsinainen jsonb-tallennus ei sisällä wrapperia, joten sen voi
    poistaa kun migraatio on tehty ja FunktioKutsun ei enää
    tarvitse olla entiteetti
  • Loading branch information
jkorri committed Feb 27, 2025
1 parent fb095a1 commit 12757e1
Showing 1 changed file with 25 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public class Laskentakaava extends BaseEntity implements FunktionArgumentti {
@JdbcTypeCode(SqlTypes.JSON)
@Column(name = "funktiokutsu", columnDefinition = "jsonb")
@Convert(converter = JsonNodeConverter.class)
private Funktiokutsu kaava;
private FunktiokutsuWrapper kaava;

public Boolean getOnLuonnos() {
return onLuonnos;
Expand Down Expand Up @@ -95,14 +95,14 @@ public void setHakukohde(HakukohdeViite hakukohde) {

public Funktiokutsu getFunktiokutsu() {
if (this.kaava != null) {
return this.kaava;
return this.kaava.getFunktiokutsu();
}
return funktiokutsu;
}

public void setFunktiokutsu(Funktiokutsu funktiokutsu) {
this.funktiokutsu = funktiokutsu;
this.kaava = funktiokutsu;
this.kaava = new FunktiokutsuWrapper(funktiokutsu);
}

public Funktiotyyppi getTyyppi() {
Expand Down Expand Up @@ -130,7 +130,7 @@ public void setKopiot(Set<Laskentakaava> kopiot) {
}

public void migrateKaava() {
this.kaava = this.funktiokutsu;
this.kaava = new FunktiokutsuWrapper(this.funktiokutsu);
}

@Override
Expand Down Expand Up @@ -161,6 +161,20 @@ private void korjaaFunktiokutsunNimi() {
}
}

/* Hibernate kilahtaa (palauttaa hauista duplikaatteja) jos jsonb-kentässä oleva tyyppi on samalla entiteetti
* joten käytetään wrapper-luokkaa */
public static class FunktiokutsuWrapper {
private Funktiokutsu funktiokutsu;

public FunktiokutsuWrapper(Funktiokutsu funktiokutsu) {
this.funktiokutsu = funktiokutsu;
}

public Funktiokutsu getFunktiokutsu() {
return this.funktiokutsu;
}
}

public Laskentakaava getKopioLaskentakaavasta() {
return kopioLaskentakaavasta;
}
Expand All @@ -170,23 +184,25 @@ public void setKopioLaskentakaavasta(Laskentakaava kopioLaskentakaavasta) {
}

@Converter(autoApply = true)
static class JsonNodeConverter implements AttributeConverter<Funktiokutsu, String> {
static class JsonNodeConverter implements AttributeConverter<FunktiokutsuWrapper, String> {

private final ObjectMapper objectMapper = new ObjectMapper();

@Override
public String convertToDatabaseColumn(Funktiokutsu funktiokutsu) {
public String convertToDatabaseColumn(FunktiokutsuWrapper wrapper) {
try {
return objectMapper.writeValueAsString(funktiokutsu);
return objectMapper.writeValueAsString(wrapper == null ? null : wrapper.getFunktiokutsu());
} catch (JsonProcessingException e) {
throw new RuntimeException("Error while serializing JsonNode to JSON", e);
}
}

@Override
public Funktiokutsu convertToEntityAttribute(String dbData) {
public FunktiokutsuWrapper convertToEntityAttribute(String dbData) {
try {
return dbData == null ? null : objectMapper.readValue(dbData, Funktiokutsu.class);
return dbData == null
? null
: new FunktiokutsuWrapper(objectMapper.readValue(dbData, Funktiokutsu.class));
} catch (JsonProcessingException e) {
throw new RuntimeException("Error while deserializing JSON to JsonNode", e);
}
Expand Down

0 comments on commit 12757e1

Please # to comment.