2013-10-12 44 views
1

根據Spring 3.2 Data access docs,SimpleJdbcInsert可用於獲取自動生成的密鑰。但是,我不能覆蓋另一個從JdbcDaoSupport最終方法的setDataSource在下面的代碼:Spring 3.2使用SimpleJdbcInsert獲取自動生成的密鑰

public class LoginDAOImpl extends JdbcDaoSupport implements LoginDAO { 

    // Cannot override the final method from JdbcDaoSupport 
    public void setDataSource(DataSource dataSource) { 
    } 

JdbcDaoSupport類沒有在Spring 3.2的文檔擴展。所以,我有2個問題:

  1. 如何使用SimpleJdbcInsert檢索自動生成的密鑰,同時擴展JdbcDaoSupport類?

  2. 如果我不擴展JdbcDaoSupport,那麼配置文件和dao類中的代碼更改是什麼。請在下面找到當前的配置和DAO代碼:

配置文件:

<bean id="loginDao" class="com.vikas.dao.LoginDAO" 
    p:dataSource-ref="dataSource" /> 

相關DOA代碼:

getJdbcTemplate().update(...); 

回答

1

您可以使用SimpleJDBCInsert的變體,其中JdbcTemplate作爲構造函數參數。

SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(getJdbcTemplate());

這樣就沒有必要去嘗試,並直接將數據源的保持。

0

自動生成的關鍵的是在刀片上產生,而不是更新

+0

我將插入查詢傳遞給getJdbcTemplate()。update(「INSERT INTO PERSON ...」,...);也沒有getJdbcTemplate()。insert方法。但是,我的問題是關於在現有的JdbcDaoSupport實現中使用SimpleJdbcInsert來檢索自動生成的鍵所需的更改。 –

+0

對不起兄弟。我發現一個鏈接可能會幫助你看到接受的答案.http://stackoverflow.com/questions/1665846/identity-from-sql-insert-via-jdbctemplate –

0

刪除JdbcDaoSupport後,我能夠使用Simple檢索自動生成的鍵通過以下更改JdbcInsert:

配置文件:

<bean id="loginDao" class="com.vikas.dao.LoginDAOImpl" 
     p:dataSource-ref="dataSource" /> 

DAO類:

public class LoginDAOImpl implements LoginDAO { 

    private JdbcTemplate jdbcTemplate; 
    private SimpleJdbcInsert insertPerson; 

    public void setDataSource(DataSource dataSource) { 

     jdbcTemplate = new JdbcTemplate(dataSource); 
     insertPerson = new SimpleJdbcInsert(dataSource).withTableName("PERSON") 
       .usingGeneratedKeyColumns("PERSON_ID"); 
    } 

    @Override 
    public void addPerson(Person person) { 

     SqlParameterSource parameters = new BeanPropertySqlParameterSource(
       person); 
     Number newId = insertPerson.executeAndReturnKey(parameters); 

     String sql = "INSERT INTO PERSON_ROLE (PERSON_ID, ROLE) VALUES (?, ?)"; 

     jdbcTemplate.update(sql, newId.longValue(), person.getPersonRole().getRole()); 
    } 

} 

我仍然在尋找一種方式,同時擴大JdbcDaoSupport使用SimpleJdbcInsert類。

相關問題