gpt4 book ai didi

java - Hibernate,更新表单bean给出错误?

转载 作者:行者123 更新时间:2023-12-01 14:39:21 24 4
gpt4 key购买 nike

在我的 Java 应用程序中,我有一个表 User,并且该表只有一个值(这一点很重要,数据库中只有一个值)。

现在我只是使用 UserVO bean 更新用户表..

这只是一个简单的更新逻辑

    public void updateUserVO(UserVO uservo)throws DataAccessException {
-------//set values
entityManager.merge(uservo);
entityManager.flush();
}

但是我得到了

    SEVERE: Servlet.service() for servlet [spring] in context with path [/EClass] threw exception [Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.HibernateException: More than one row with the given identifier was found: U1, for class: com.sits.ec.valueObjects.UserVO] with root cause
org.hibernate.HibernateException: More than one row with the given identifier was found: U1, for class: com.sits.ec.valueObjects.UserVO
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:108)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3294)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:285)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1090)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1038)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:630)
at org.hibernate.type.EntityType.resolve(EntityType.java:438)
---------

有趣的是......相同的代码运行另一个系统,并且数据库中也只有一列......

我有近 10 个更新操作,它们使用相同的用户对象(id=U1),一小时前该代码工作正常,但现在至少有一个不能工作..每个更新操作都会给出上述错误.

Specifications:  OS - Ubuntu(Linux) 

数据库 - MySql(Lamp 服务器)。请帮我解决这个问题..

最佳答案

堆栈跟踪的重要部分是

在 org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152)

当您调用合并(我猜是一个分离的实体)时,它会尝试通过主键加载实体。这会失败,因为返回了多个对象。查看您的数据库,您有不止一行的这一列具有相同的值。那么这个表确实只有一行还是有更多行,但您只映射这一行?您正在更新主键吗?我可以想象 orm 框架有这方面的问题,如果是这样的话,为您想要更新的值引入另一列。您正在更新什么类型的属性。

关于java - Hibernate,更新表单bean给出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16144896/

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