Я работаю с проектом JPA, который использует несколько сущностей, Event - это класс, который содержит запрашиваемую сущность и действие, у меня есть преобразователь, который сериализует полезную нагрузку как json, и я пытаюсь написать логику для десериализации в соответствии с сущностью введите, например, Пользователь / Роль / Привилегия
<entity class="core.model.Event">
<table name="EVENTS"></table>
<attributes>
<basic name="mid">
<column column-definition="BINARY(16)" />
</basic>
<basic name="exception">
<column column-definition="json" />
<convert
converter="services.event.repo.ExceptionJsonConverter" />
</basic>
<basic name="payload">
<column column-definition="json" />
<convertconverter="services.user.PayloadJsonConverter" />
</basic>
</attributes>
</entity>
public class Event extends BaseModel<UUID> {
private UUID mid;
private String command;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
private BaseModel payload;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
private ServiceException exception;
}
public class PayloadJsonConverter implements AttributeConverter<User, String> {
private static final ObjectMapper mapper = new ObjectMapper();
public PayloadJsonConverter() {
mapper.setSerializationInclusion(Include.ALWAYS);
}
@Override
public String convertToDatabaseColumn(User model) {
try {
log.trace("Mapping ORM {}", model);
return mapper.writeValueAsString(model);
} catch (JsonProcessingException ex) {
return null;
}
}
@Override
public User convertToEntityAttribute(String dbData) {
try {
log.debug("Converting to Model {}", dbData);
User model = mapper.readValue(dbData, User.class);
log.debug(">>> {}", model);
return null;
} catch (IOException ex) {
// log.error("IO exception while transforming json text column in Object
// property", ex);
return null;
}
}
Универсальный конвертер, usgin orm.xml