Java EE Entity не получает обновленные данные базы данных - PullRequest
0 голосов
/ 30 ноября 2010

Я создаю приложение, используя 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 () вызывается снова, но возвращает только первую связь, пока я не разверну приложение. После повторного развертывания все отображается.

Редактировать: Сначала я подумал, что это проблема сеанса. Оказывается, что выход из приложения и повторный вход не решают проблему, а только повторное развертывание.

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

1 Ответ

0 голосов
/ 01 декабря 2010

Наконец я обнаружил метод EntityManager.flush (), и он добился цели.

Ссылки: http://www.manning -sandbox.com / thread.jspa? ThreadID = 26541 & tstart = -1

...