Ошибка «Сохранить временный экземпляр перед сбросом» - PullRequest
0 голосов
/ 07 июня 2019

У меня есть 2 объекта, Дисциплина и объект Категория. Эти 2 связаны, используя отношение МНОГО-ТО-ОДИН. Я пытаюсь создать новую Дисциплину через Почтальона, используя этот объект JSON:

{
    "name": "test_sample"
}

POJO:

Дисциплина:

import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

import javax.persistence.*;

@Entity(name = "discipline")
@Where(clause = "is_deleted=0")
@SQLDelete(sql = "UPDATE discipline SET is_deleted = 1 WHERE id = ?")
public class Discipline extends BaseEntity{
    @Column(name = "name")
    private String name;
    @ManyToOne
    @JoinColumn(name = "category_id")
    private Category category;


    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

}

Категория:

import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

import javax.persistence.*;

@Entity(name = "category")
@Where(clause = "is_deleted=0")
@SQLDelete(sql = "UPDATE category SET is_deleted = 1 WHERE id = ?")
public class Category extends BaseEntity{
    @Column(name = "name")
    private String name;

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

}

Я получаю эту ошибку:

{
    "timestamp": "2019-06-06T21:22:42.746+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.test.meeting.meeting.data.model.Discipline.category -> com.test.meeting.meeting.data.model.Category; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.test.meeting.meeting.data.model.Discipline.category -> com.test.meeting.meeting.data.model.Category",
    "path": "/api/v1/discipline"
}

Как я могу сохранить объект Discpline, не устанавливая отношения между этими двумя первыми.

1 Ответ

0 голосов
/ 07 июня 2019

Вы должны добавить в аннотацию @ManyToOne: cascade=CascadeType.ALL.Причиной возникновения этой ошибки является то, что вы хотите сохранить дочерний объект, которого нет в базе данных, а в спящем режиме не разрешено что-то подобное.

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