2016-04-18 13 views
0

私はMySQLデータベースとPlay Frameworkでscalaのアプリケーションを実行していますが、テーブルに "entite"という値を挿入する必要があります。このテーブルでは、私のテーブルに "intervalle_date"を挿入し、そのIDが存在する場合は "entite"を挿入します。存在しない場合は、inmyテーブル "intervalle_date"を作成し、 "entite"の後に挿入する必要があります。Scala/MySQL Columnはnullにはできません

 var intervalle_date_id = SQL(
     """select id from intervalle_date where date_text_debut={date_text_debut} && date_text_fin={date_text_fin}""").on(
     'date_text_debut -> value._9, 'date_text_fin->value._10).as(scalar[Long].singleOpt) 

をそのvarがNULLであると、それがnullだ場合、私はそれを作成した場合、私は確認した後:

だから私は存在するかどうかを確認するために最初の要求を行う

if(intervalle_date_id == null) 
    { 
    SQL(""" insert into intervalle_date(date_text_debut, date_text_fin) values ({date_text_debut}, {date_text_fin})""").on(
     'date_text_debut -> value._9, 
     'date_text_fin -> value._10).executeInsert(scalar[Long].single) 
    var intervalle_date_id = SQL(
     """select id from intervalle_date where date_text_debut={date_text_debut} && date_text_fin={date_text_fin}""").on(
     'date_text_debut -> value._9, 'date_text_fin->value._10).as(scalar[Long].singleOpt) 
    } 

最後に、私は私の挿入を行いますentite上:

SQL(""" insert into entite(entite_type, id_metier, id_service, regles, niveau_detail, 
          niveau_avancement, sources, licence_id, intervalle_date_id, 
          utilisateur_id) values({entite_type}, {id_metier}, {id_service}, {regles}, {niveau_detail}, 
                {niveau_avancement}, {sources}, {licence_id}, {intervalle_date_id}, {utilisateur_id}) 
     """).on(
     'entite_type -> value._1, 
     'id_metier -> value._2, 
     'id_service -> value._3, 
     'regles -> value._4, 
     'niveau_detail -> value._5, 
     'niveau_avancement -> value._6, 
     'sources -> value._7, 
     'licence_id -> value._8, 
     'intervalle_date_id -> intervalle_date_id, 
     'utilisateur_id -> value._11).executeInsert(scalar[String].single) 

しかし、私はそれを実行したとき、私はそのエラーがあります: [MySQLIntegrityCをonstraintViolationException:列 'intervalle_date_id'はnullにはできません]

私は理解していますが、なぜ "intervalle_date_id"がNULLであるのかわかりません。

あなたの助けに感謝のあなたを

答えて

1

ここでの問題は、あなたが二回intervalle_date_idを定義していることである:一度nullにすることができif声明、外。 if文の中で再度実行します。その秒のvarで、は使用されません。そのスコープの終わりに達するとすぐに削除されます(})。その後、最後のinsertはifの外側にnullという変数を使用します。

あなたがしなければならないのは、ifに更新代わりに新しいものを作成する既存の変数内varキーワードを削除します:

if(intervalle_date_id == null) { 
    SQL(""" insert into intervalle_date(date_text_debut, date_text_fin) values ({date_text_debut}, {date_text_fin})""").on(
      'date_text_debut -> value._9, 
      'date_text_fin -> value._10).executeInsert(scalar[Long].single) 
    intervalle_date_id = SQL(
    """select id from intervalle_date where date_text_debut={date_text_debut} && date_text_fin={date_text_fin}""").on(
     'date_text_debut -> value._9, 'date_text_fin->value._10).as(scalar[Long].singleOpt) 
} 
関連する問題