Перед каскадом имеются отложенные действия вставки до уровня 0 - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь сохранить эту модель в спящем режиме persist метод:

package com.neo.jpa;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

@Entity
@Table(name="scoring_response"

        )
public class Response {

    @Id
    @SequenceGenerator(name="scoring_credit_response_sequence" , sequenceName="scoring_credit_response_sequence")
    @GeneratedValue(generator="scoring_credit_response_sequence")
    private Long id;


    @JoinColumn(name="dossier_reference")
    @ManyToOne(fetch=FetchType.LAZY , optional=false)
    @NotNull
    private Dossier reference;

    @ManyToOne(fetch=FetchType.LAZY , optional=false , cascade= {CascadeType.DETACH})
    @JoinColumn(name="question_code")
    @NotNull
    private Question question;

    @Column(name="response" , columnDefinition="text")
    private String response;

    public Response() {}

    public Response(String jsonString) {
        System.out.println(jsonString);
    }

    //getters and setters

}

Где Dossier и Question - простая модель ключевого значения.

Когда я пытаюсь сохранить новый объект Response с сохраненным идентификатором вопроса (идентификатор присутствует в базе данных), все работает нормально.

Но когда я пытаюсь сохранить новый Response с несохраненным идентификатором вопроса, поведение в порядке, я получил эту трассировку ошибки:

"Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class org.apache.deltaspike.data.api.QueryInvocationException,message=Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class org.apache.deltaspike.data.api.QueryInvocationException,message=Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class java.lang.reflect.InvocationTargetException,message=null",
        "Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class org.apache.deltaspike.data.api.QueryInvocationException,message=Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class java.lang.reflect.InvocationTargetException,message=null",
        "Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class java.lang.reflect.InvocationTargetException,message=null",
        null,
        "org.hibernate.TransientPropertyValueException: Not-null property references a transient value - transient instance must be saved before current operation: com.neo.jpa.Response.question -> com.neo.jpa.Question",
        "Not-null property references a transient value - transient instance must be saved before current operation: com.neo.jpa.Response.question -> com.neo.jpa.Question"

Но все последующие запросы не будут выполнены, если идентификатор вопроса сохранен или нет. Я не знаю почему:

"Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class org.apache.deltaspike.data.api.QueryInvocationException,message=Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class org.apache.deltaspike.data.api.QueryInvocationException,message=Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class java.lang.reflect.InvocationTargetException,message=null",
        "Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class org.apache.deltaspike.data.api.QueryInvocationException,message=Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class java.lang.reflect.InvocationTargetException,message=null",
        "Failed calling Repository: [Repository=com.neo.repository.ResponseRepository,entity=com.neo.jpa.Response,method=persist,exception=class java.lang.reflect.InvocationTargetException,message=null",
        null,
        "There are delayed insert actions before operation as cascade level 0."
]
}

Пожалуйста, я хочу понять, в чем проблема.

Примечание: когда я использую hibernate save метод, все работает хорошо.

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