#jpa #kotlin #foreign-keys
#jpa #kotlin #foreign-keys
Вопрос:
У меня есть объект A, который имеет поле внешнего ключа с возможностью обнуления ‘field1’, которое ссылается на первичный ключ объекта B. Если я делаю запрос post со значением поля, которого нет в сущности B.Я ожидаю исключения внешнего ключа, вместо этого я получаю объект, ссылающийся на несохраненное исключение переходного экземпляра. Если ‘field1’ задано как notnull, ожидается, что для 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]; ограничение [book]; вложенным исключением является org.hibernate.exception.ConstraintViolationException: не удалось выполнить инструкцию»
На самом деле получение: «org.hibernate.Исключение TransientPropertyValueException: свойство Not-null ссылается на переходное значение — переходный экземпляр должен быть сохранен перед текущей операцией: Student .book -> Book; вложенным исключением является java.lang.Исключение IllegalStateException: org.hibernate.Исключение TransientPropertyValueException: свойство Not-null ссылается на переходное значение — переходный экземпляр должен быть сохранен перед текущей операцией: Student .книга -> Книга
Комментарии:
1. Можете ли вы показать мне код, который сохраняет ученика?
2. ` fun createStudent(студент: com.test.model. Студент): com.test.model. Student { возвращает buildStudent(this.studentRepository.save(com.test. Сущность. Студент (stduent.id , студент.книга))) }` Репозиторий реализован с помощью jpa ` import org.springframework.data.jpa.repository.* интерфейс StudentRepository: JpaRepository<Student, Int> }`