gorm método de guardar que provoca que se active una consulta de selección

Estoy usando Grails 1.3.7 y zkoss y mi modelo de dominio es el siguiente, cargo la entidad Persona en la sesión 1 y le hago cambios a través de la interfaz de usuario.

Al pulsar Guardar en la sesión 2, quiero guardar la entidad.

Así que desde mi compositor / controlador llamo a un método de servicio (transaccional) y luego hago person.save (), cuando veo que se disparan las consultas sql veo una consulta que intenta recuperar el objeto empleado.

Después de lo cual se activa el guardado y se genera una excepción de excepción no objetiva

org.hibernate.NonUniqueObjectException: un objeto diferente con el mismo valor identificador ya estaba asociado con la sesión: [com.nthdimenzion.domain.Employee # 2]

Consult

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]
  ......
}

¿Es correcto este comportamiento?

Respuestas a la pregunta(1)

Su respuesta a la pregunta