Als ik door SO loop, heb ik veel van dit soort vragen gevonden met betrekking tot JSON- of XML-typen voor toewijzing in Postgres. Het lijkt erop dat niemand het probleem heeft gehad van het lezen van een aangepast Postgres-type, dus hier de oplossing voor zowel lezen als schrijven met behulp van een puur JPA-type conversiemechanisme.
Het Postgres JDBC-stuurprogramma wijst alle attributen voor onbekende (voor Java) typen toe aan het object org.postgresql.util.PGobject, dus het is voldoende om een converter voor dit type te maken. Hier is een voorbeeld van een entiteit:
@Entity
public class Course extends AbstractEntity {
@Column(name = "course_mapped", columnDefinition = "json")
@Convert(converter = CourseMappedConverter.class)
private CourseMapped courseMapped; // have no idea why would you use String json instead of the object to map
// getters and setters
}
Hier het voorbeeld van de converter:
@Converter
public class CourseMappedConverter implements AttributeConverter<CourseMapped, PGobject> {
@Override
public PGobject convertToDatabaseColumn(CourseMapped courseMapped) {
try {
PGobject po = new PGobject();
// here we tell Postgres to use JSON as type to treat our json
po.setType("json");
// this is Jackson already added as dependency to project, it could be any JSON marshaller
po.setValue((new ObjectMapper()).writeValueAsString(courseMapped));
return po;
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
@Override
public CourseMapped convertToEntityAttribute(PGobject po) {
try {
return (new ObjectMapper()).readValue(po.getValue(),CourseMapped.class);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
Als u zich echt aan String JSON-representatie in uw entiteit moet houden, kunt u een dergelijke converter maken voor String-type
implements AttributeConverter<String, PGobject>
Hier is een erg vies (hoewel werkend) proof of concept, het maakt ook gebruik van nep-objectserialisering om JPA te vertellen dat het object is gewijzigd als het was
https://github.com/sasa7812/psql-cache-evict-POC