org.hibernate.nonusiqueObjectException в приложении GWT с использованием гибернации через Gilead

StackOverflow https://stackoverflow.com/questions/2924259

  •  05-10-2019
  •  | 
  •  

Вопрос

Я работаю над проектом для колледжа, который использует GWT, Hibernate и Glead. По сути, на данный момент пользователи должны быть в состоянии добавлять друзей и удалить их. Кроме того, пользователь может увидеть, если его или ее друзья онлайн или нет.

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

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
Это было полезно?

Решение

Похоже, у вас есть 3 пользователей с тем же именем пользователя. Как вы используете uniqueResult(), Вы говорите в зимующем, что вы ожидаете только одно значение.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top