2013-06-05 4 views
5

का उपयोग करके जेनरेट किए गए कॉलम आईडी वैल्यू को वापस कैसे करें, यह सुनिश्चित करें कि मैं डीडी में जेडीबीसी टेम्पलेट, तैयार स्टेटमेंट निर्माता और जेनरेटेड केहोल्डर का उपयोग करके डाली गई पंक्ति के जेनरेट आईडी को स्टोर करने के लिए एक पंक्ति डाल रहा था।स्प्रिंग जेडीबीसी टेम्पलेट और प्रीपेडस्टेटमेंटसेटर

jdbcTemplate.update(SomePreparedStatementCreator, generatedKeyHolder) 

हालांकि, अब मैं एक अद्यतन मेरी jdbcTemplate का उपयोग कर, लेकिन अब एक preparedStatementSetter साथ निष्पादित करने के लिए कोशिश कर रहा हूँ। एकमात्र तरीका जिसे मैं हमारे लिए jdbcTemplate.update (स्ट्रिंग एसक्यूएल, प्रीपेडस्टेटमेंटसेटर) देख सकता हूं लेकिन अब मुझे यकीन नहीं है कि जेनरेट किए गए कॉलम की आईडी कैसे वापस करनी है।

PreparedStatementSetter pss = new PreparedStatementSetter() { 
     @Override 
     public void setValues(PreparedStatement preparedStatement) 
       throws SQLException { 
      preparedStatement.setString(1, pupil.getFirstname()); 
      preparedStatement.setString(2, pupil.getSurname()); 
      preparedStatement.setString(3, pupil.getGivenName()); 
      preparedStatement.setDate(4, pupil.getDob()); 
     } 
    };  


    jdbcTemplate.update("INSERT INTO STUDENTS "+ "(FIRSTNAME, SURNAME, GIVEN_NAME, DOB) VALUES (?,?,?,?)",pss); 

तैयार करने के लिए मेरा दृष्टिकोण मानना ​​सही है, क्या कोई जानता है कि मैं जेनरेट आईडी के मूल्य को कैसे वापस कर सकता हूं?

उत्तर

5

जेनरेटेड कुंजियां JdbcTemplate#update(PreparedStatementCreator,KeyHolder) विधि के साथ वापस की जा सकती हैं। लेकिन इसे प्राप्त करने के लिए आपको org.springframework.jdbc.core.PreparedStatementCreatorFactory के आधार पर अपना अनुरोध बदलने की जरूरत है।

इसके बजाय मैं SimpleJdbcInsert उपयोगिता कक्षा डालने के लिए उपयोग करने की अनुशंसा करता हूं।

अपने डीबी क्षेत्रों बहुत आपके संस्थाओं की क्षेत्रों के रूप में ही है, तो आप बस निम्नलिखित के रूप में कर सकते हैं:

Number key = jdbcInsert.executeAndReturnKey(new BeanPropertySqlParameterSource(entity)); 
//set generated key 
if (key != null){ 
    entity.setId(key.longValue()); 
} 

यदि यह (अपने मामले में),

//define parameters 
Map<String, Object> parameters = new HashMap<String, Object>(); 
parameters.put("FIRSTNAME", pupil.getFirstname()); 
parameters.put("SURNAME", pupil.getSurname()); 
parameters.put("GIVEN_NAME", pupil.getGivenName()); 
parameters.put("DOB", pupil.getDob()); 
//execute insert 
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters)); 
//set generated key 
if (key != null){ 
    pupil.setId(key.longValue()); 
} 
नहीं है तो

jdbcInsert पैरामीटर आप प्रत्येक इकाई के लिए एक बार परिभाषित करने की जरूरत है, और वह ऐसा दिखाई देगा:

SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(getJdbcTemplate()); 

jdbcInsert.withTableName(entityName); //e.g. "STUDENTS" 

jdbcInsert.setGeneratedKeyName(idColumn); //e.g. "ID" 

jdbcInsert.setColumnNames(columnNames); //e.g. Arrays.asList("FIRSTNAME", "SURNAME", "GIVEN_NAME", "DOB") 
+0

धन्यवाद बहुत बहुत है! – PolyglotPiglet

+0

@ user1724882 अगर आपको इसकी आवश्यकता है तो कृपया इस उत्तर को स्वीकार करने पर विचार करें। – n1ckolas

संबंधित मुद्दे