2015-06-16 3 views
0

Мы используем dspace 3.2 и добавили собственный класс проверки подлинности. Этот класс аутентификации вызывается всякий раз, когда сеанс генерируется первым пользователем. Внутри кода мы ищем пользователя и добавляем его в группу, если они не принадлежат к этой группе.dspace duplicate rows in epersongroup2eperson

EPerson eperson = EPerson.findByEmail(context, email); 
if (eperson != null) { 
    for (Group group : Group.findAll(context, Group.ID)) { 
     if (!group.isMember(eperson)) { 
      group.addMember(eperson); 
      group.update(); 
      context.commit(); 
     } 
    } 
} 

Проблема возникает, когда одновременно выполняется несколько сеансов и добавление этого лица в группу. Это вызывает идентичное вхождение строки в таблице epersongroup2eperson

dspace=> select * from epersongroup2eperson; 
id | eperson_group_id | eperson_id 
-----+------------------+------------ 
1 |    3 |   10 
2 |    3 |   10 

Это известная ошибка в DSpace?

ответ

0

Я попытался поставить блок кода synchronized вокруг кода выше, но повторяющиеся строки все еще происходят. Поэтому я добавил ограничение в таблицу, чтобы сделать столбцы уникальными.

dspace=> ALTER TABLE epersongroup2eperson ADD UNIQUE(eperson_group_id, eperson_id);