JPA Hibernate Невозможно добавить или обновить дочернюю строку - PullRequest
0 голосов
/ 03 октября 2018

Я хочу обновить данные в таблице с помощью JPArepository «сохранить» как функцию добавления.добавить его работу, но обновить его не то же самое.

Ошибка

java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`timesheetdb`.`app`, CONSTRAINT `app_ibfk_1` FOREIGN KEY (`batch_id`) REFERENCES `batch` (`batch_id`))

Это мой код

App.java

@Entity
@Table(name = "app")
public class App {
@Id
@GeneratedValue
@Column(name="app_id" , nullable = true)
private int app_id;

@Column(name="app_no")
private String app_no; 

@ManyToOne(fetch = FetchType.LAZY ,cascade = {CascadeType.PERSIST,CascadeType.MERGE} )
@JoinColumn(name="batch_id" , referencedColumnName = "batch_id",insertable=false, updatable=false)
private Batch batch = new Batch() ;


//get and set

Batch.java

@Entity
@Table(name = "batch")
public class Batch {
@Id
@GeneratedValue
@Column(name="batch_id" , unique = true, nullable = false ,insertable= false , updatable = false) 
private int batch_id;


@Column(name="batch_name")
private String batch_name;

//get and set

журнал в спящем режиме

Hibernate: insert into batch (batch_name, batch_id) values (?, ?)
Hibernate: insert into app (app_id,app_no, batch_id) values (?, ?,?)

Проблема

1. Почему журнал необновить?

2. Иногда я проверяю, чтобы увидеть ошибку. Я увидел новое ограничение, например FKsbmff76rtfh40rncf2110t4pf, вместо ограничения app_id?

3. Проблемы в том, что я ошибаюсь при отображении «Много в один»?

1 Ответ

0 голосов
/ 03 октября 2018

Вместо

cascade = {CascadeType.PERSIST,CascadeType.MERGE}

Попробуйте использовать,

cascade = CascadeType.ALL

Для лучшего понимания вы можете обратиться по ссылке https://vladmihalcea.com/a-beginners-guide-to-jpa-and-hibernate-cascade-types/.

Также удалите новыйПакет () из строки ниже

@ManyToOne(fetch = FetchType.LAZY ,cascade = {CascadeType.PERSIST,CascadeType.MERGE} )
@JoinColumn(name="batch_id" , referencedColumnName = "batch_id",insertable=false, updatable=false)
private Batch batch = new Batch() ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...