Я создаю приложение, используя Java2EE, и у меня есть несколько сущностей, включая эти два:
Сущность продукта (фрагмент):
@Entity
public class Product implements Serializable {
@ManyToMany(mappedBy = "products")
private List<KB> kbs;
public List<KB> getKbs() {
return kbs;
}
}
Entity KB ( K nowledge B ase article) (фрагмент):
@Entity
public class KB implements Serializable {
@ManyToMany
private List<Product> products;
}
Можете ли вы сказать, что они связаны в двух направлениях, поэтому JPA создала три таблицы: Product, KB и KB_Product.
У меня также есть EJB-компоненты и управляемые бины для доступа к данным, сохраняемым этими сущностями, вот фрагмент кода, который я использую для получения списка связанных КБ с конкретным продуктом:
@SessionScoped
public class ProductController {
private List<KB> associatedKBs;
public List<KB> getAssociatedKBs() {
this.associatedKBs = current.getKbs();
return associatedKBs;
}
}
Все работает хорошо: когда я связываю Продукт с КБ, он получает вставленный в базу данных (таблица KB_Product), но (и в этом проблема) метод getKBs () возвращает обновленные данные только при первом вызове. *
Пример:
1. Я создаю продукт под названием «Компьютер».
2. Я создаю новую статью базы знаний и связываю «Компьютер» с этой базой знаний.
3. Эта связь сохраняется в таблице KB_PRODUCT.
4. getKBs () вызывается в первый раз. Все показывает ОК.
5. Я создаю вторую статью базы знаний и связываю ее с «Компьютер».
6. Эта связь сохраняется в таблице KB_PRODUCT.
7. getKBs () вызывается снова, но возвращает только первую связь, пока я не разверну приложение. После повторного развертывания все отображается.
Редактировать: Сначала я подумал, что это проблема сеанса. Оказывается, что выход из приложения и повторный вход не решают проблему, а только повторное развертывание.
Заранее спасибо!