вместо этого, если есть ограничение уникальности базы данных - но так оно и работает.

ользую grails 1.3.7 и zkoss, и моя модель предметной области такая, как показано ниже, я загружаю сущность Person в сеансе 1 и вносю в нее изменения через пользовательский интерфейс.

При нажатии сохранить в сеансе 2 я хочу сохранить объект.

Поэтому из моего композитора / контроллера я вызываю метод службы (транзакционный), а затем выполняю person.save (). Когда я вижу, что запущены sql-запросы, я вижу запрос, который пытается получить объект сотрудника.

После чего происходит сохранение и выдается исключение nonuniqueobjectexception

org.hibernate.NonUniqueObjectException: другой объект с тем же значением идентификатора уже был связан с сеансом: [com.nthdimenzion.domain.Employee # 2]

запрос

Hibernate: select this_.id as id7_0_, this_.version as version7_0_, this_.emp_id as emp4_7_0_, this_.person_id as person5_7_0_ from person_role this_ where this_.class='com.nthdimenzion.domain.Employee' and this_.emp_id=?

class PersonService {
static transactional = true
def savePerson(Person person) {
    person = person.save();
}

}

class Person extends Party{

String firstName;
String middleName;  
static hasMany = [ personRoles : PersonRole ] -- lazy loaded

....}

class PersonRole {
public static enum ROLETYPES{
    EMPLOYEE,AUTHOR
};
public boolean hasRoleType (ROLETYPES roleType){
    return false;
}
static transients = ['ROLETYPES']
static constraints = {
}
 }



class Employee extends PersonRole{
def empRoleType = [ROLETYPES.EMPLOYEE]
String empId
    static belongsTo = [person:Person]
 static transients = ['empRoleType', 'uid']
static constraints = {
    books(nullable:true)
    empId(unique:true)
}
static hasMany = [books:Book]
static mapping = { books cascade:"all" }
static belongsTo = [person:Person]
  ......
}

Это поведение правильно?

Ответы на вопрос(1)

Ваш ответ на вопрос