2013-12-10 20 views
8

MYSQL'de bir tablom var ve bu tabloyu eklemek için JDBC Şablonları'nı kullanıyorum.Spring'in JDBC Şablonları neden tablo varsayılan değerini kullanmıyor

Sütunlardan birinin varsayılan değeri vardır ve Map<String, Object> parameters haritasında belirtmem.

Bir istisna alıyorum Column 'colName' cannot be null.

Bunu açıklayan var mı lütfen?

Teşekkür

* Düzenleme: kodu *

contactDetailsInsertTemplate = new SimpleJdbcInsert(dataSource).withTableName("contactdetails").usingGeneratedKeyColumns("contactcode"); 
Map<String, Object> parameters = new HashMap<String, Object>(); 
Number newId = contactDetailsInsertTemplate.executeAndReturnKey(parameters); 
+0

Lütfen kullandığınız kodu gösteriniz. –

cevap

11

SQL Ekinde belirtilen sütunları sınırlamanız gerekir.

Bunu yapmazsanız, SQL deyimi kullanılamaz TÜM sütun ve varsayılan değerler için değerleri gerekecektir SimpleJdbcInsert.usingColumns()

bakınız.

örn.

insert into mytable (col1, col2) values (val1, val2); 

yerine

insert into mytable values (val1, val2); 
1

INSERT INTO mytable (1,null)INSERT INTO mytable (1) aynı değildir. Önceden özellikle null ekler, daha sonra karar DB'ye kadar çıkar (varsayılan değer). Spring JDBC eskiyi yapıyor.

+0

Cevabınız için teşekkürler. Her iki cevabınız da doğrudur, ancak NickJ'in cevabı belirli bir soru için daha doğrudur. Keşke ikinizi de kabul edebilseydim ama onu kabul edip size katılıyorum :). – Gleeb

1

kullanmak sorun başka bir yerde: Ben SimpleJdbcInsert kullanmak ve buna parametrelerin bir harita zaman, ben basit sadece ben sağlanan parametrelerle insert statment oluşturmak için bekliyoruz. DEFAULT değerine sahip tabloda NOT NULL sütunu var ve bunu belirtmek istemiyorum. Ayrıca, tüm sütun isimlerini usingColumns()'da açıkça belirtmek istemiyorum, çünkü bir parametre haritası oluştururken bunu yapıyorum! Neden tekrar yapmalıyım? Sorun şu ki, SimpleJdbcInsert'un daha akıllı olmasını ve gerekli olmayan tüm sütunları eklenecek ifadeyi eklemesini istiyor. Neden sadece parametre haritası ile sağlanan sütunları kullanarak bir ifade oluşturmuyorsunuz?

bakınız: http://forum.spring.io/forum/spring-projects/data/54209-simplejdbcinsert-and-columns-with-default-values

0

Sen usingGeneratedKeyColumns() parametreleri olarak varsayılan bir değere sahip sütunlar ekleyebilirsiniz.
Oluşturulan INSERT ifadesinden, bu yöntemin parametreleri olarak dahil edilen sütun adları atlanacaktır.

İlgili konular