The sky is the limit

Vue.js、PHP、Javaなどに関する開発情報を発信しています。時々日常生活に関しても触れます

【エラー】This DBMS allows only a single AutoInc column to be returned from an INSERT

Slickを使用していたときにタイトルのエラーが出たので解消していきます。

f:id:duo-taro100:20160218004611p:plain

こちらはpkに対してAUTOINCREMENTが設定されている場合には起こりません。
逆にAUTOINCREMENTではない状態でreturning を使用するとこのエラーが発生します。
なので、解決策は2つです。

①pkにAUTOINCREMENTを設定すべきなのに、設定されていない場合はAUTOINCREMENTにしましょう。

pkであるカラム(ここではid)にAUTOINCREMENTを設定してあげましょう。
■変更前

def id = column[Long]("id", O.PrimaryKey)

■変更後

def id = column[Long]("id", O.PrimaryKey, O.AutoInc)

こうすればエラーは起こりません。

②returningを使わないようにしましょう。

AUTOINCREMENTをつけたくない場合は、レコードinsert時にreturningを使わないように変更します。
■変更前

def create(data:dbData) =(tableQuery returning tableQuery.map(_.id)) += data

■変更後

def create(data:dbData) =tableQuery += data

これでOKです。