gpt4 book ai didi

java - org.hibernate.NonUniqueObjectException 在 GWT 应用程序中通过 gilead 使用 hibernate

转载 作者:行者123 更新时间:2023-11-30 05:12:27 25 4
gpt4 key购买 nike

我正在开发一个使用 GWT、Hibernate 和 Gilead 的大学项目。基本上目前用户应该能够添加和删除 friend 。此外,用户还可以查看他或她的 friend 是否在线。

我的问题是,当我添加一个已经与另一个 friend 相关的 friend 时,我收到此错误:

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 {

我的问题在于此方法中我的服务的实现类,当用户按下客户端的添加 friend 按钮时会调用该实现类。

    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() 时,您是在告诉 Hibernate 您只需要一个值。

检查您的数据库或将 uniqueResult() 替换为 List() 以查看返回的内容。

关于java - org.hibernate.NonUniqueObjectException 在 GWT 应用程序中通过 gilead 使用 hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2924259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com