Я буду использовать домашних животных в качестве модели данных, чтобы продемонстрировать свою проблему. В магазине домашних животных есть разные типы домашних животных.
Когда магазин создан со смешанными типами домашних животных, я получаю исключение.
[{"type":"cat","sound":"lala","color":"black"},{"type":"dog","bread":"pit","color":"brown"}]";
используется: java.lang.IllegalArgumentException: данный массив байтов
не может быть преобразован в объект Json... еще 134 Причина:
com.fasterxml.jackson.databind.exc.InvalidTypeIdException: не удалось
разрешить идентификатор типа 'cat' как подтип
com.test.Dog: Класс
com.test.Cat не является подтипом
com.test.Dog at
[Источник:
(byte[])"
строка: 1, столбец: 119] (через цепочку ссылок:
java.util.ArrayList[1]) at
app//com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43)
Я понимаю, что у postgres есть проблемы с сохранением объектов разных типов. Есть ли способ решить эту проблему?
класс сущности:
@Entity
@NoArgsConstructor
@Data
@AllArgsConstructor
@TypeDef(name = "json", typeClass = JsonType.class)
@EntityListeners({
AuditingEntityListener.class
})
@Audited
public class StoreEntity implements Serializable {
@Id
private String id;
@NotNull
private String name;
@Valid
@Type(type = "json")
@Column(columnDefinition = "jsonb")
private List
list= new ArrayList();
}
объект данных
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
visible = true,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(name = "cat", value = Cat.class),
@JsonSubTypes.Type(name = "dog", value = Dog.class),
@JsonSubTypes.Type(name = "Pig", value = Pig.class)
})
abstract class Pets {
private String type;
@JsonProperty("type")
private String type;
// getters, setters, toString
}
class Cat extends Pets {
}
class Dog extends Dogs {
}
Repository
public interface StoreEntityRepository
extends CrudRepository, JpaSpecificationExecutor {
}
Подробнее здесь: https://stackoverflow.com/questions/722 ... ls-on-save