2009-07-10 4 views
4

SpringがSpringを理解する上で最も難しいことの一つは、Springが同じ問題に対する複数のアプローチをサポートしていることです。だから私のアプリケーションでは、私は例えば、@PersistanceContextアノテーションを使用して注入されたEntityManagerを使用してSpring DaoSupportと@PersistanceContext EntityManager?

@Repository 
public class JpaDao extends JpaDaoSupport implements Dao { 

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

は(のEntityManagerに注入する必要があります)JpaDaoSupportを拡張するとの互換性このアプローチですか?私にとっては、同じ問題を解決するための2つの互換性のないアプローチのように見えますが、Springの経験が豊富な人からのアドバイスが必要です。

JpaDaoSupportを拡張してはならない場合は、@PersistenceContextアプローチを使用してDAOを構築する方法を教えてください。

答えて

4

あなたは、彼らが2異なっていることが正しいです同じ問題にアプローチします。どちらが「より良い」というのは味の問題だと私は思います。アノテーションを使用すると、コード内のSpringインポートの依存関係を避けることができます。さらに、Spring JavaDocのJpaDaoSupportには、新しいJPAプロジェクトでの使用を提案しています。 JpaDaoSupportは、他のORM戦略のサポートにJPAと同等のためのSpringのサポートを行うことがあります(HibernateDaoSupportJdbcDaoSupportTopLinkDaoSupport、など)。そのような場合、アノテーションベースの注入はオプションではありません。

1

はEntityManagerを注入するため、あなたはちょうどあなたがoficialブログからthis postにこのトピックに関する詳細な情報を得ることができます

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

次の定義を追加する必要が

+0

私はEntityManagerをどのように注入するのか理解しています。私の問題は、Spring DAOのベストプラクティスに関するものです。 –

+2

JPAを標準的なアプローチとして使用すると、Springソリューション(つまりJpaSupportの拡張)に強制するのは意味がないと思います。 JPA + EJB3インジェクションに縛られている場合、必要に応じていつでもJARをApplication Serverに移行できます。 私の2マイクロセント:) – diega

0

私はむしろJpaDaoSupportを拡張しないことをお勧めします。春はあなたのためにすべてを行います。詳細については、diegaが提案したリンクに従ってください。私はspring-jpaをサポートするためにアプリケーションをアップグレードするために同じブログを続けました。

関連する問題