У меня есть две сущности, одна для форм, а другая для полей.Я создал класс для составления первичного ключа Fields, поэтому у меня есть 2 свойства: первичный ключ Number и форма внешнего ключа.Я хочу вставить только внешний ключ с одним сообщением, поэтому я сделал запрос на сообщение следующим образом:
@CrossOrigin
@PostMapping(value = "/field/{form_id}")
public Field addField(@PathVariable Integer form_id, @RequestBody Field body) {
Form result = formRepository.findById(form_id).orElse(null);
body.setForm(result);
fieldRepository.save(body);
return body;
}
Класс моей формы:
@Entity
public class Form {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@OneToMany(mappedBy="form", cascade = CascadeType.ALL)
@OrderBy("id ASC")
private Set<Field> fields;
.
.
.
(Setter & Getter)
}
Класс моего поля
@Entity
@IdClass(FieldKey.class)
@JsonIgnoreProperties(
value = {"form"},
allowSetters = true
)
public class Field {
@Id
private Integer id;
@Id
@ManyToOne
@JoinColumn(name="form_id", nullable=false)
private Form form;
.
.
.
(Setter and Getter)
Мой класс FieldKey
@JsonIgnoreProperties(
value = {"form"},
allowSetters = true
)
public class FieldKey implements Serializable {
private Integer id;
private Form form;
public FieldKey(Integer id, Form form) {
this.id = id;
this.form = form;
}
public FieldKey() {}
(Setter & Getter)
}
Я ожидал вставить в таблицу полей новое поле с отношением Form_ID, но получаю эту ошибку:
org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.Integer' to required type 'com.model.Form' for property 'form'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.Integer' to required type 'com.model.Form' for property 'form': no matching editors or conversion strategy found
Если я используювстроенная аннотация Id вместо использования класса в качестве EmbeddedKey работает без проблем, но мне не нравится аннотация json, потому что это будет:
{"fieldKey":{"id":1,"form_id":28}, etc...}