LINUX.ORG.RU

[grails] Запись в 2 таблицы одновременно


0

1

Добрый день.

Столкнулся с следующей проблемой: Есть 4 Domain class'a

Employee:

package personnel_grails

class Employee {
  String name
  String surname
  String patronymic
  Status status
  Positions positions

  static constraints = {
    surname(maxLenght: 40, blank: false)
    name(maxLenght: 40, blank: false)
    patronymic(maxLenght: 40, blank: false)
    status(nullable: false)
    positions(nullable: false)
  }
  String toString(){
    "${this.surname} ${this.name} ${this.patronymic}"
  }
}

Positions:

package personnel_grails

class Positions {
    String positions
    static constraints = {
    }
  String toString(){
    "${this.positions}"
  }
}

Status

package personnel_grails

class Status {
    String status
    static constraints = {
    }
  String toString(){
    "${this.status}"
  }
}

Statistic:

package personnel_grails

class Statistic {
  Employee employee
  Positions positions
  Status status
  Date date = new Date()


    static constraints = {
    }
}

Необходимо чтобы при добавлении/изменении таблицы employee добавлялась соттветствующая запись в таблицу Statistic

Пока сделал так (в контроллере employee):

    def save = {
        def employeeInstance = new Employee(params)
        if (employeeInstance.save(flush: true)) {
          def statisticInstance = new Statistic()
          statisticInstance.employee = Employee.findById(employeeInstance.id)
          statisticInstance.positions = Positions.findById(params.positions.id)
          statisticInstance.status = Status.findById(params.status.id)

          statisticInstance.save()
.....
}

Но это далеко не самое оптимальнное решение (лишних 4 запроса к БД).

Как можно оптимизировать?

- statisticInstance.employee = Employee.findById(employeeInstance.id)

+ statisticInstance.employee = employeeInstance

P.S. grails не знаю.

anonymous
()
Ответ на: комментарий от anonymous

на 1 запрос стало меньше. а как избавиться от остальных 2х?

unit_1985
() автор топика

сам себе отвечу. помогло следующее:

          statisticInstance.employee = employeeInstance
          statisticInstance.positions = Positions.get(params.positions.id)
          statisticInstance.status = Status.get(params.status.id)

unit_1985
() автор топика
Ответ на: комментарий от thevery

спасибо за совет.

у меня еще 1 маленький вопрос:

я пытаюсь явно задать именование id колонки в домене

static mapping = {
    table 'employee'
    id column: 'employeeId'
  }

Но по немпонятным причинам колонка переводится в нижний регистр и получается вместо employeeId employeeid, как это побороть?

unit_1985
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.