2009-07-10 5 views
4

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

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

@Repository 
public class JpaDao extends JpaDaoSupport implements Dao { 

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

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

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

ответ

4

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

1

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

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

вы можете получить больше информации об этой теме в this post от Официального блог

+0

Я понимаю, как внедрить EntityManager, у меня это работает нормально. Моя проблема связана с лучшими практиками Spring DAO. –

+2

Я думаю, что если вы используете JPA в качестве стандартного подхода, принудительное решение Spring (т. Е. Расширение JpaSupport) не имеет смысла. Если вы будете привязаны к инъекции JPA + EJB3, вы можете перенести свои банки на сервер приложений, когда захотите. Мои 2 микроцента :) – diega

0

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

Смежные вопросы