Сопоставление один к одному - Spring Data JPA Spring Boot - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно иметь сопоставление один к одному между двумя таблицами в моем приложении 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

}

1 Ответ

0 голосов
bookRepo.save(book);

Вы уверены, что хотите сохранить сущность книги, а не обновлять ее? И если вы хотите редактировать существующие детали книги, почему бы вам не отредактировать объект, который ссылается на нее, вместо создания нового?

...