У меня есть объект 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