EntityManager и два DAO с PersistenceContextType.EXTENDED - PullRequest
0 голосов
/ 17 января 2011

У меня проблема с менеджером сущностей в моем приложении. У меня есть два DAO, как это:

@Repository
public abstract class DaoA 
{
    protected ClassA persistentClass;

    @PersistenceContext(name="my.persistence", type=PersistenceContextType.EXTENDED)
    protected EntityManager entityManager;
    -------------- some typical action for DAO --------------
}

Второй DAO для ClassB и похож на DaoA. Остальные вещи сделаны для меня рамками Spring.

Когда я отлаживаю приложение, я понимаю, что оба объекта DAO имеют разные экземпляры EntityManager. В результате мои два разных DAO связаны с разными PersistenceContext.

Вопрос в том, правильное ли это поведение или нет? Я хотел бы иметь одинаковый PersistenceContext для всех моих классов DAO. Пожалуйста, дайте мне подсказку, если это возможно, и правильно ли я понял JPA?

С уважением, Hsd

1 Ответ

1 голос
/ 17 января 2011

Это правильное поведение EXTENDED контекста персистентности, поэтому вам не нужно, чтобы в данном случае оно было EXTENDED.

В большинстве случаев вам нужен TRANSACTIONAL контекст персистентности, то естьрежим по умолчанию, когда type опущен:

@PersistenceContext(name="my.persistence")
protected EntityManager entityManager;

В этом режиме контекст постоянства связан с транзакцией, так что все DAO будут использовать один и тот же контекст постоянства при работе внутри одной транзакции.Я думаю, это то, что вам нужно.

...