Spring JPA - Есть ли способ сохранить несколько идентификаторов с ID CLASS вместо Embedded? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть две сущности, одна для форм, а другая для полей.Я создал класс для составления первичного ключа 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...}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...