У меня есть тройная связь в моей базе данных: Пользователь, Книга и Книжный магазин. Сущности JPA определены следующим образом:JPA Entity не обновляется до перезагрузки сервера
class Book {
@Id
@Column(name = "ID")
private Integer id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "book")
private Collection<BookOrder> bookOrderCollection;
....
}
class User {
@Id
@Column(name = "ID")
private Integer id;
@OneToMany(mappedBy = "reader")
private Collection<BookOrder> bookOrderCollection;
....
}
class BookOrder {
@JoinColumn(name = "BOOK_ID", referencedColumnName = "ID")
@ManyToOne
private Book book;
@PrimaryKeyJoinColumn(name = "READER_ID", referencedColumnName = "ID")
@ManyToOne
private User reader;
....
}
Когда я хочу сохранить, я просто сделать это:
Book book = ...;
User reader = ...;
BookOrder order = new BookOrder();
order.setBook(book);
order.setReader(reader);
book.getBookOrderCollection().add(order);
reader.getBookOrderCollection().add(order);
book.setQuantity(book.getQuantity() - 1);
bookFacade.edit(book);
И BookFacade класс:
class BookFacade {
public void create(Book entity) {
getEntityManager().persist(entity);
getEntityManager().flush();
}
public void edit(Book entity) {
getEntityManager().merge(entity);
}
public void remove(Book entity) {
getEntityManager().remove(getEntityManager().merge(entity));
}
public Book find(Object id) {
return getEntityManager().find(Book.class, id);
}
}
Это отлично работает в что количество книг обновляется в базе данных и вставляется BookOrder
. Тем не менее, User
bookOrderCollection
не обновляется до перезапуска сервера (когда я извлекаю считыватель из базы данных).
Я хочу избежать выполнения usersFacade.edit(reader)
, потому что это не безопасно для создания двух транзакций за одну операцию. Вместо этого я добавил cascade = Cascade.ALL
в поле reader
в классе Order
, но это не решило проблему.
Как я могу заставить его работать в течение одной транзакции?
Что такое сущность BookOrder? – mvera
Как ограничить ваши транзакции? – mvera
BookOrder - это объект, который представляет заказ книги. У него есть книга orderd, читатель и другие поля: адрес, цена и т. Д. – nrofis