2012-05-13 11 views
2

使用注釈によって引き起こさspring3-アノテーションJdbcDaoSupport

@Repository("testDao") 
public class TestDaoImpl extends JdbcDaoSupport implements BaseDao{ 

@Override 
public Object addObject(String sqlid, Object obj) { 
    // TODO Auto-generated method stub 
    return null; 
} 

:java.lang.IllegalArgumentExceptionが: 'データソース' や 'jdbcTemplate' が

を必要とする私が使用したくない:

<bean id="termsDao" class="com.manage.base.dao.impl.TestDaoImpl"> 
    <property name="jdbcTemplate" ref="jdbcTemplate"/> 
</bean> 

このXMLに設定されたコード、および「jdbcTemplate」は他の「ばね-XML」で定義されている。

アノテーションでこの問題を解決する方法:「 'dataSource'または 'jdbcTemplate'が必要です。」

+2

回避策ます。http://forum.springsource .org/showthread.php?111432-Why-is-setDatSource() - メソッドインJdbcDaoSupport-final –

答えて

4

次のいずれかの方法を使用できます。 SpringFrameworkクラスをパブリックインターフェイスに公開しないので、最初の1つはdataSourceを使用することをお勧めします。両方とも動作します。

@Repository("testDao") 
public class TestDaoImpl extends JdbcDaoSupport implements BaseDao{ 

    @Autowired 
    TestDaoImpl(DataSource dataSource) { 
    setDataSource(dataSource); 
    } 
} 

それとも

@Repository("testDao") 
public class TestDaoImpl extends JdbcDaoSupport implements BaseDao{ 

    @Autowired 
    TestDaoImpl(JDBCTemplate template) { 
    setJdbcTemplate(template); 
    } 
} 
+0

あなたはDataSourceがapplicationContext.xmlをで定義されたデータソースを参照しない最初のアプローチを使用している場合ます。 <プロパティ名= "url" value = "$ {jdbc.url}" /> devdar

+0

はい、あります。私たちはコンストラクタargを介してdataSourceを注入しています。 – gkamal

+0

は、私は最初のオプションを使用しますが、私はjava.lang.IllegalArgumentExceptionが取得しています:あなたは助けることができる必要とされる「データソース」や「jdbcTemplateを」? – devdar

0

私もあなたのDAOへのコンストラクタは不要符号化ステップであるとしてデータソースを注入感じます。 JDBCコンフィグレーションXMLでdatasourceをJDBCテンプレートに挿入して、すべてのDAOのjdbctTemplate オブジェクトを取得するのはなぜですか?

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 
and let your DAO extend JDBCSupport class. 

public class PersonDao extends JdbcDaoSupport{ 
public List<Person> selectAll(){ 
    String selectAllSql = "SELECT * FROM PERSON;"; 

    return getJdbcTemplate().query(selectAllSql, new PersonRowMapper()); 

........ }

}

全例:ここ http://www.studytrails.com/frameworks/spring/spring-jdbc-dao-support.jsp

+0

JdbcDaoSupport注入されるjdbctemplateプロパティを必要とします。スレッドセーフ!!)の代わりに 'DaoSupport'を設定するのです。ここでランタイム例外が発生します – fuzzy28

関連する問題