2016-04-18 4 views
0

Я делаю anapplication на scala с базой данных MySQL и Play Framework, мне нужно вставлять значения в таблицу «entite», и в этой таблице мне нужно проверить идентификатор из другой таблицы », intervalle_date "и вставить в мою таблицу« entite », если этот идентификатор существует, если он не существует, мне нужно создать его inmy-таблицу« intervalle_date »и после вставки в« entite ».Scala/MySQL Column не может быть нулевым

Так что я первый запрос, чтобы проверить, существуют ли:

 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) 

После того как я проверить, что переменная является 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) 
    } 

Наконец я мои вставки на Ме- ханизма:

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 дважды: один раз за пределами if заявление, которое может быть нулевым; а затем снова внутри оператора if. Этот второй varникогда не использовался - он упал немедленно, когда достигнет конца этой области (}). Затем ваш последний insert по-прежнему использует переменную null за пределами if.

Все, что вам нужно сделать, это удалить ключевое слово var внутри if к обновления существующей переменной вместо создания нового:

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) 
}