2013-10-12 3 views
1

Согласно Spring 3.2 Data access docs, SimpleJdbcInsert может использоваться для извлечения автоматически сгенерированных ключей. Но, я не могу переопределить окончательный метод setDataSource из JdbcDaoSupport в коде ниже:Весна 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. Пожалуйста, найдите ниже текущей конфигурации и дао код:

файл конфигурации:

<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

Я передаю запрос insert к getJdbcTemplate(). Update ("INSERT INTO PERSON ...", ...); Также нет метода getJdbcTemplate(). Insert. Однако мой вопрос касается изменений, необходимых для использования SimpleJdbcInsert в существующей реализации JdbcDaoSupport для извлечения автоматически сгенерированных ключей. –

+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()); 
    } 

} 

Я до сих пор ищет способ использования SimpleJdbcInsert при расширении JdbcDaoSupport.

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