Проблема десериализации в классе abtract из-за наличия связи с другим классом

#angular #spring

#angular #spring

Вопрос:

Я разрабатываю приложение angular 6 / spring boot. У меня есть следующие связи: когда я пытаюсь сохранить объект Quote, это работает, если объект Customer равен null. Но если я хочу сохранить объект Quote у customer, я получаю сообщение :

Клиент общедоступного абстрактного класса @Entity @Inheritance реализует Serializable{

 /**
 * 
 */
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long idCustomer;
@Column(unique = true)
@NotNull
private String code;
private String name;
private String address;
private String email;
private String phone;
private String city;
@OneToMany(mappedBy="customer")
private List<Order> orders;
private byte status;
@OneToMany(mappedBy="customer")
private List<Quote> quote;
@JoinColumn(name="country")
@ManyToOne
private Country country;

@Entity
public class Individual extends Customer{

private String firstname;
private String gender;

@Entity
public class Company extends Customer implements Serializable{
private static final long serialVersionUID = 1L;
@NotNull
private String legalForm;

@Entity
public class Quote implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long idQuote;
private LocalDate dateQuote;
@OneToMany(fetch = FetchType.EAGER, mappedBy="quote", 
cascade=CascadeType.ALL)
private List<QuoteLine> items;
@ManyToOne
@JoinColumn(name="id_customer",nullable=false)
private Customer customer;
  

исключение com.fasterxml.jackson.databind.exc.InvalidDefinitionException: не удается создать экземпляр com.pam.entities.Customer (не существует создателей, подобных конструкции по умолчанию): абстрактные типы либо должны быть сопоставлены с конкретными типами, иметь пользовательский десериализатор, либо содержать дополнительную информацию о типе

Ответ №1:

Вам необходимо использовать методы конструктора по умолчанию и средства получения setter. Вы это написали?

Комментарии:

1. Конструктор где?

2. Внутри вашей компании класса POJO. ajav Quote.java

3. Да, у меня есть конструктор по умолчанию и установщики / получатели во всех классах

4. Хорошо .. Можете ли вы попробовать, поместив данную аннотацию на Company.java класс на уровне класса. @JsonDeserialize(как = Company.class )

5. Я пытаюсь это сделать, но у меня та же ошибка: в [Источник: (PushbackInputStream); строка: 1, столбец: 460] (через цепочку ссылок: com.pam.entities. Цитирую[«customer»])] с основной причиной ….