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?