Я использую 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]
......
}
Правильно ли это поведение?