Мне нужно иметь сопоставление один к одному между двумя таблицами в моем приложении Spring JPA - Spring Boot.Я последовал примеру на
Пример данных сопоставления пружин один к одному
Он работает нормально и также вставляет записи во вторую таблицу (Сведения о книге).В моем приложении мне нужно обновить запись во второй таблице несколько раз (скажем, нет столбца страниц, как в примере).
Я читаю объект книги, а затем обновляю поля bookdetail и сохраняю их обратно, используяхранилище (расширяет CrudRepository).
Если я сделаю это 10 раз, в таблице bookdetail будет 10 записей для одной и той же книги, и в таблице book она ссылается на значение ключа последней обновленной записи bookdetail для этой книги.книга.Но мне нужно обновить ту же запись в bookdetail.Одна запись в bookdetail для одной записи в Book.
// Этот блок может выполняться n раз в одном и том же потоке для одной и той же книги в // фактическом потоке кода приложения
// book = retrieve from Book repo
if(book.getBookDetail() == null){
System.out.println("NO BookDetail ");
BookDetail bookDetail = new BookDetail();
bookDetail.set...(123)
book.setBookDetail(bookDetail);
}else{
book.getBookDetail().set...(123)
}
bookRepo.save(book);
Что такоея делаю неправильно здесь.
Добавление классов сущностей
public class Book implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int bookId;
@OneToOne(fetch=FetchType.LAZY ,cascade = CascadeType.MERGE)
@JoinColumn(name="detailId")
private BookDetail bookDetail;
//Other fields
//Getter & Setter
}
public class BookDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int detailId;
@Lob
private String data;
@OneToOne(mappedBy="bookDetail")
private Book book;
//Other fields
//Getter & Setter
}