相关疑难解决方法(0)

防止发生hibernate StaleObjectStateException

我有一个Spring控制器方法的问题.它实际上对导致StaleObjectStateException的同一实体进行了两次更新.

问题是,当我检索Member实例时,我认为它会以某种方式导致更新(请参阅//UPDATE ONE)Advertisement实例(实际上并不需要),当我更新Advertisement实例(请参阅参考资料//UPDATE TWO)时,它会抛出StaleObjectStateException.

我的问题是如何防止在我的情况下发生此异常(请记住我使用Spring Data JPA)?

这是Member实体类:

@Entity
public class Member {
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "member")
private List<Advertisement> advertisements;
...
Run Code Online (Sandbox Code Playgroud)

并在Advertisement实体类中:

@NotNull
@ManyToOne(fetch = FetchType.LAZY)
private Member member;
Run Code Online (Sandbox Code Playgroud)

这是控制器方法:

@RequestMapping(value = "/family/advertisement/edit", method = RequestMethod.POST, produces = "text/html")
    public String editFamilyAdvertisement(@ModelAttribute @Validated(value = Validation.AdvertisementCreation.class) FamilyAdvertisementInfo familyAdvertisementInfo,           BindingResult bindingResult, Model model) {
        Member member = memberService.retrieveCurrentMember();//UPDATE ONE
        if (!advertisementService.advertisementBelongsToMember(familyAdvertisementInfo.getFamilyAdvertisement(), member)) {
            throw new IllegalStateException("advertisement …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa spring-data-jpa

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

hibernate ×1

jpa ×1

spring ×1

spring-data-jpa ×1