Как изменить внешний ключ во многих отношениях к одному без извлечения его - PullRequest
0 голосов
/ 30 сентября 2019

Предположим, что в спящем режиме у нас есть отношения многие-к-одному. Книга сущность может иметь только одного Автор , а Автор может иметь много Книг .

Сущность книги:

@Entity
@Table(name ="books")
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;

    @ManyToOne
    private Author author;
}

Сущность автора:

@Entity
@Table(name = "authors")
public class Author {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(mappedBy = "author")
    private List<Book> books;

    public void addBook(Book book){
        if (books == null)
            books = new ArrayList<Book>();

        books.add(book);
        book.setAuthor(this);
    }
}

Я сохранил несколько книг и авторов в сеансе1,Теперь у каждой книги есть ФК для автора, и сессия закрыта. Теперь в новом сеансе я хочу изменить PK книги без загрузки этой книги. Я знаю идентификатор книги и хочу обновить только ее FK другому автору. Примерно так:

Author getAuthor = session2.get(Author.class, 1L);
Book tmpBook = new Book();
tmpBook.setId(2L);
tmpBook.setAuthor(getAuthor);
session2.update(tmpBook);

Но в этом сценарии hibernate обновляет все остальные столбцы книги до NULL. Это не то, что я хочу. Я не хочу сначала брать книгу, а потом менять ее. Есть ли решение этой проблемы?

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...