Получение «Объект ссылается на несохраненный временный экземпляр» вместо «Исключение ограничения внешнего ключа» для поля внешнего ключа, допускающего нулевое значение - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть объект A, у которого есть поле внешнего поля, допускающее обнуляемое значение 'field1', которое ссылается на первичный ключ объекта B. Если я делаю запрос на публикацию со значением поля, которого нет в объекте B. Я ожидаю внешнего вместо ключевого исключения я получаю объект ссылается на несохраненное временное исключение экземпляра. Если 'field1' сделано как ненулевое ожидаемое исключение для Foreignkey. Хотелось бы узнать, какова связь между обнуляемым полем и ограничением внешней клавиши

Пробовал с

1)      @ManyToOne(cascade = arrayOf(CascadeType.All))
        @JoinColumn(name ="book",referencedColumnName ="book_id")
        var book: Book? = null,

when I am giving this..instead of checking foreign key constraint, it was trying to add book entity also into DB

2)      @ManyToOne(cascade = arrayOf(CascadeType.All))
        @JoinColumn(name ="book",referencedColumnName ="book_id",nullable=true, insertable=false,updatable=false)
        var book: Book? = null,

3)      @ManyToOne(optional=false,fetch=FetchType.EAGER)
        @JoinColumn(name ="book",referencedColumnName ="book_id")
        var book: Book? = null,

4)      @ManyToOne(optional=false,fetch=FetchType.LAZY)
        @JoinColumn(name ="book",referencedColumnName ="book_id")
        var book: Book? = null,


But whatever I try I am getting the same transientobject exception ..only if the field "book" was given a not null constraint in db, it is throwing foreign key exception.
please find the code
    @Entity
    @Table(name ="student")
    class Student(

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    var id: Long? = -1,

    @ManyToOne()
    @JoinColumn(name ="book",referencedColumnName ="book_id")
    var book: Book? = null,
        )


    @Entity
    @Table(name ="book")
    class Book(

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "book_id")
    var book_id: Long? = -1

    )

Ожидается: "не удалось выполнить оператор; SQL [n / a]; ограничение [книга]; вложенное исключение - org.hibernate.exception.ConstraintViolationException: не удалось выполнить оператор"

На самом деле получаю: "org.hibernate. свойство ссылается на временное значение - временный экземпляр должен быть сохранен перед текущей операцией: Student.book -> Book

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