2016-04-04 43 views
1

Tek bir String sütunu kullanarak bir dizi ada temsil eden çok basit bir MySQL tablom var. Slick'in insertOrUpdate'u kullanmak istiyorum ama yanlış MySQL üretiyor ve hatalara neden oluyor. Özellikle, güncellenmesi Ne belirtmezSlick 3, tek bir sütun tablosu için yanlış MySQL yükselme ifadeleri üretiyor

insert into `TABLE1_NAME` (`column`) values ('value') on duplicate key update 

yürütmek istiyor, bu yüzden bu başarısız olur. İki sütun içeren benzer bir tablo,

insert into `TABLE2_NAME` (`key`, `other_col`) values ('value1', 'value2') on duplicate key update `other_col`=VALUES(`other_col`) 

gibi ifadelerle sorunsuz şekilde kullanılabilir. TABLE1 için birincil anahtar ayarlıyoruz. Tablo projeksiyon haritalamamızı yanlış yapıyor olabiliriz. Slick 3.1.1 kullanıyoruz.

class Table1(tag: Tag) extends Table[Table1Record](tag, "TABLE1_NAME") { 
    def value = column[String]("value", O.PrimaryKey, O.Length(254)) 
    def * = (value) <> (Table1Record, Table1Record.unapply) 
} 

class Table2(tag: Tag) extends Table[Table2Record](tag, "TABLE2_NAME") { 
    def value1 = column[String]("value1", O.PrimaryKey, O.Length(254)) 
    def value2 = column[String]("value2", O.Length(254)) 
    def * = (value1, value2) <> (Table2Record.tupled, Table2Record.unapply) 
} 

cevap

2

Tek bir sütun tablosuna böyle bir "ekleme veya güncelleştirme" kavramı yoktur. Tek sütun anahtarın bir parçasıdır. Anahtar tam olarak eşleşirse, güncellenecek başka sütun olmaz. Anahtar eşleşmediyse, yeni eklenen satır herhangi bir anahtarın kopyası olmayacaktır, bu nedenle güncelleme cümlesi olmayacaktır. Güncellenecek başka sütun olmadığından, oluşturulan SQL hatalı biçimlendirilmiştir - bazı alan adlarının bundan sonra ekleneceği varsayımıyla bir miktar metin oluşturulmuştur, ancak eklenecek alan adı yoktur. Bu update fıkrada sadece anahtar olmayan sütunları listeler

insert into `TABLE2_NAME` (`key`, `other_col`) 
values ('value1', 'value2') 
on duplicate key update `other_col`=VALUES(`other_col`) 

gibi arada

, iki sütunlu bir tablo için, ekleme deyimi görünüyor. (Bunu düzeltmek, tek sütun tablonuzla neler olup bittiğini daha iyi anlamanıza yardımcı olacaktır.)

+0

Anlıyorum. Öyleyse gerçekten istediğim: "bu sorudaki gibi" yoksa "ekle" (https://stackoverflow.com/questions/30706193/insert-if-not-exists-in-slick-3-0-0) . Teşekkürler! – broadmonkey