org.hibernate. NonUniqueObjectException В рамках использования приложения GWT в спящем режиме через Галаад

Я работаю над проектом для колледжа, который использует GWT, Будьте в спящем режиме и Галаад. В основном в настоящий момент пользователи должны смочь добавить друзей и удалить их. Кроме того, пользователь видит, онлайн ли его друзья или нет.

Моя проблема состоит в том, что, когда я добавляю друга, который уже связан с другим другом, я получаю эту ошибку:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value     was already associated with the session: [com.example.client.YFUser#4]

Это - мой класс обслуживания для моего gwt приложения:

public class TestServiceImpl extends PersistentRemoteService implements TestService {

Моя проблема здесь с моим классом реализации моего сервиса в этом методе, который называют, когда пользователь нажимает на добавить друга кнопка на клиентском.

    public void addYFUserFriend(String userName){
            //this retrieves the current user
    YFUser user = (YFUser)getSession().getAttribute(SESSION_USER);

    Session session = com.example.server.HibernateUtil.getSessionFactory().getCurrentSession();

    session.beginTransaction();

    YFUser friend = (YFUser) session.createQuery("select u FROM YFUser u where u.username = :username").setParameter("username", userName).uniqueResult();
    System.out.println("user " + friend.getUsername() + " Found");

    user.getFriends().add(friend);

    friend.getBefriended().add(user);
            session.update(user);
            session.update(friend);

    session.getTransaction().commit();
}

Сценарий:

user1 добавляет user2 как друга. Это хорошо работает, Затем user3 добавляет user2, и исключение выдается.

Какие-либо идеи, почему и где моя логика идет не так, как надо?

Обновление: хорошо, таким образом, я изменил свой код, и я удалил весь getCurrentASession() вызовы и замененный openSession() вызовы, которые закрываются в соответствующей точке, теперь ошибка, которую я получаю:

com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract void com.example.client.TestService.addYFUserFriend(java.lang.String)' threw an unexpected exception: org.hibernate.NonUniqueResultException: query did not return a unique result: 3
1
задан yochannah 13 December 2013 в 12:18
поделиться

1 ответ

Мне кажется, что у вас 3 пользователя с одинаковыми именами. Поскольку вы используете uniqueResult(), вы сообщаете Hibernate, что ожидаете только одно значение.

Проверьте свою базу данных или замените uniqueResult() на List() и посмотрите, что вы получите в ответ.

2
ответ дан 3 September 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: