Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate,更新表单bean时出错?_Java_Spring_Hibernate_Lamp - Fatal编程技术网

Java Hibernate,更新表单bean时出错?

Java Hibernate,更新表单bean时出错?,java,spring,hibernate,lamp,Java,Spring,Hibernate,Lamp,在Java应用程序中,我有一个表用户,这个表只有一个值(在数据库中只有一个值很重要) 现在我正在使用uservobean更新用户表 这只是一个简单的更新逻辑 public void updateUserVO(UserVO uservo)throws DataAccessException { -------//set values entityManager.merge(uservo); entityManager.flush(); } 但是我越来越 S

在Java应用程序中,我有一个表用户,这个表只有一个值(在数据库中只有一个值很重要)

现在我正在使用uservobean更新用户表

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

    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)
---------
有趣的是。。。相同的代码运行另一个系统,在该系统中,数据库中也只有一列

一个小时前,我对同一个用户对象(
id=U1
)进行了近10次更新操作,代码工作正常,但现在至少有一次不工作。。每次更新的操作都会出现上述错误

Specifications:  OS - Ubuntu(Linux) 
数据库-MySql(Lamp服务器)

请帮我解决这个问题。

stacktrace的重要部分是

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

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