Предположим, что в спящем режиме у нас есть отношения многие-к-одному. Книга сущность может иметь только одного Автор , а Автор может иметь много Книг .
Сущность книги:
@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. Это не то, что я хочу. Я не хочу сначала брать книгу, а потом менять ее. Есть ли решение этой проблемы?
Заранее спасибо