Несколько логинов персистентного юнита? - PullRequest
2 голосов
/ 01 февраля 2011

Эй, ребята, я использую ссылку затмения для JPA в моем проекте Java SE. Я использую классы «jpa controller» для каждой из моих таблиц в моих базах данных (это правильный путь). Я также предоставляю EntityManagerFactory для каждого "класса контроллера jpa", чтобы я мог получить entitymanager. Когда программа запускается, она показывает успешный вход в AnalyzerPU 2 раза. Должен ли я использовать только один EntityManagerFactory. Кажется, для каждого из тех, кто у меня есть, это показывает логин. Если я продолжу, у меня будет 12 логинов, по 1 на каждую таблицу в моей базе данных. Я знаю, что это не может быть правильно?

public class PkgLineControllerImpl extends AbstractController implements PkgLineController {

private EntityManagerFactory emf = null;

public PkgLineControllerImpl() {

    super(StateHistoryImpl.class);
    emf = Persistence.createEntityManagerFactory("StateHistoryAnalyzerPU");
}

public EntityManager getEntityManager() {
    return emf.createEntityManager();
}

@Override
public List<PkgLine> findAll() {
    EntityManager em = getEntityManager();

    List<PkgLine> pkgLineList = new ArrayList<PkgLine>();

    try {
        pkgLineList = em.createNamedQuery("PkgLine.findAll").getResultList();
        return pkgLineList;
    } finally {
        em.close();
    }
}

}

Вот так я раскладываю свои контроллеры. Спасибо за любую помощь.

Иногда это будет сделано.

[EL Info]: 2011-02-01 14:34:07.991--ServerSession(18450577)--EclipseLink, version: Eclipse Persistence Services - 2.0.2.v20100323-r6872
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful
100
200
100
200
100
null
null
null
null
null

Иногда это будет сделано.

Persistence Services - 2.0.2.v20100323-r6872
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful
100
200
100
200
100
Persistence Services - 2.0.2.v20100323-r6872
[EL Info]: 2011-02-01 14:34:08.381--ServerSession(18450577)--fileStateHistoryAnalyzerPU login successful
null
null
null
null
null

Где ноль - один метод класса JPAController, возвращающий некоторые данные, а числа - другой класс контроллера JPA, возвращающий данные. Я поместил один объект управления предприятием в AbstractClass, но он все еще делает это.

1 Ответ

1 голос
/ 01 февраля 2011

У вас должен быть один EntityManagerFactory и один EntityManager на транзакцию / запрос / сеанс.У вас также должна быть одна единица персистентности со всеми вашими классами.

Технически создание нескольких фабрик с одинаковым именем единицы персистентности и без аргументов не должно использовать один и тот же блок персистентности, кеш / пул соединений, но если у вас естьразные единицы персистентности, тогда у каждого будет свой кеш / пул соединений.

...