Spring DaoSupport и @PersistanceContext EntityManager? - PullRequest
4 голосов
/ 11 июля 2009

Одной из самых трудных вещей в понимании Spring является то, что Spring поддерживает несколько подходов к одной и той же проблеме.

Итак, в моем приложении я использовал встроенный EntityManager, используя аннотацию @PersistanceContext, например:

@Repository
public class JpaDao extends JpaDaoSupport implements Dao {

    @PersistenceContext(unitName = "PersistanceUnit", type = PersistenceContextType.EXTENDED)
    private EntityManager em;

Совместим ли этот подход с расширением JpaDaoSupport (которое требует инъекции в EntityManager)? Для меня это выглядит как два несовместимых подхода к решению одной и той же проблемы, но я хотел бы получить совет от кого-то, у кого больше опыта работы со Spring.

Если мне не нужно расширять JpaDaoSupport, как мне построить DAO, используя подход @PersistenceContext?

Ответы [ 3 ]

4 голосов
/ 15 июля 2009

Вы правы, что это два разных подхода к одной и той же проблеме.Я думаю, какой из них «лучше» - дело вкуса.Использование аннотаций позволяет избежать зависимости импорта Spring в вашем коде, и даже Spring JavaDoc для JpaDaoSupport предлагает использовать их для новых проектов JPA. JpaDaoSupport призван сделать поддержку Spring для JPA эквивалентной поддержке других стратегий ORM ( HibernateDaoSupport , JdbcDaoSupport , TopLinkDaoSupport и т. Д.).В этих случаях инъекция на основе аннотаций не возможна.

1 голос
/ 11 июля 2009

Для введения EntityManager вам просто нужно добавить следующее определение

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

Вы можете получить больше информации по этой теме в этом сообщении из официального блога

0 голосов
/ 07 июля 2013

Я бы скорее рекомендовал вам не расширять JpaDaoSupport, Spring сделает все за вас. Перейдите по ссылке, предложенной diega, для получения дополнительной информации, того же блога, по которому я следовал, чтобы обновить свое приложение для поддержки spring - jpa.

...