Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 更新的Jpa事务正在引发第二次更新的异常_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java 更新的Jpa事务正在引发第二次更新的异常

Java 更新的Jpa事务正在引发第二次更新的异常,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我正在使用spring传播更新数据库中的行。必填项,它第一次更新很好,但第二次抛出异常 03:44:58,206 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/wad].[springMain]] (http--127.0.0.1-8080-1) Servlet.service() for servle t springMain threw exception: org.hibernate.S

我正在使用spring
传播更新数据库中的行。必填项,它第一次更新很好,但第二次抛出异常

03:44:58,206 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/wad].[springMain]] (http--127.0.0.1-8080-1) Servlet.service() for servle
t springMain threw exception: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect
): [com.guthyrenker.wad.core.model.lookup.PublisherLookupItem#4025]
        at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:492) [hibernate-core-4.0.1.Final.jar:4.0.1.Fin
al]
代码:

@RequestMapping(value=“/admin/updatePublisher.htm”,method=RequestMethod.POST,products=“application/json”)
公共@ResponseBody
JsonDataWrapper updatePublisher(@RequestBody(“PublisherLookupItem”)PublisherLookupItem,HttpServletRequest请求)引发异常{
wadRepository.updatePublisher(publisherLookupItem);
JsonDataWrapper结果=新的JsonDataWrapper(publishertList);
返回结果;
}
包com.wad.service
公共接口存储库
{
@事务性(传播=传播。必需)
公共出版商Lookupitem updatePublisher(PublisherLookupItem PublisherLookupItem);
}
包com.wad.service.impl;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Repository;
导入com.wad.core.dao.WadDAO;
导入com.wad.core.model.lookup.PublisherLookupItem;
导入com.wad.core.service.ServiceException;
导入com.wad.core.service.wad存储库;
@存储库
公共类WadRepositoryImpl实现WadRepository
{
@自动连线
私人瓦道瓦道;
@凌驾
public PublisherLookupItem updatePublisher(PublisherLookupItem PublisherLookupItem){
返回wadDAO.savePublishers(publisherLookupItem);
}
}
@存储库
公共类WadDAO
{   
公共出版商Lookupitem savePublishers(PublisherLookupItem PublisherLookupItem){
publisherLookupItem=em.merge(publisherLookupItem);
返回publisherLookupItem;
}
}

在用
@RequestMapping
注释的控制器中,需要将
wadRepository.updatePublisher(…)
返回的实例放入
JSONDATAWERP结果中


从您的代码中,现在您正在响应中返回
PublisherLookupItem
的陈旧实例,因此下次尝试合并该实例时会出现陈旧对象异常

我假设@Transactional(propagation=propagation.)是一个输入错误?是的,它是一个输入错误,实际值是@Transactional(propagation=propagation.REQUIRED),将更新代码。
@RequestMapping(value = "/admin/updatePublisher.htm", method = RequestMethod.POST, produces = "application/json")
public @ResponseBody
JsonDataWrapper<PublisherLookupItem> updatePublisher(@RequestBody("PublisherLookupItem") publisherLookupItem, HttpServletRequest request) throws Exception {

    wadRepository.updatePublisher(publisherLookupItem);
    JsonDataWrapper<PublisherLookupItem> result = new JsonDataWrapper<PublisherLookupItem>(publishertList);
    return result;
}

package com.wad.service
public interface WadRepository
{
    @Transactional(propagation = Propagation.REQUIRED)
    public PublisherLookupItem updatePublisher(PublisherLookupItem publisherLookupItem);
}

package com.wad.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.wad.core.dao.WadDAO;
import com.wad.core.model.lookup.PublisherLookupItem;
import com.wad.core.service.ServiceException;
import com.wad.core.service.WadRepository;

@Repository
public class WadRepositoryImpl implements WadRepository
{
    @Autowired
    private WadDAO wadDAO;

    @Override
    public PublisherLookupItem updatePublisher(PublisherLookupItem publisherLookupItem) {
        return wadDAO.savePublishers(publisherLookupItem);
    }
}

@Repository
public class WadDAO
{   
    public PublisherLookupItem savePublishers(PublisherLookupItem publisherLookupItem) {
        publisherLookupItem = em.merge(publisherLookupItem);
        return publisherLookupItem;
    }
}