需要保留分离对象的真实场景:Hibernate

问题描述 投票:0回答:2

我正在学习hibernate,并开始了解Hibernate为Entities维护的Object状态:TransientPersistentdetached

我们希望将detached对象再次成为persisted的现实生活场景是什么?

我在网上提到了其中一个示例,其中数据在GUI中显示然后分离,一旦用户进行更改,分离的对象将再次保留。

为了更好地理解,可以有除此之外的任何其他示例吗?

hibernate jpa
2个回答
1
投票

我们有一个场景,因为一些糟糕的实现设计,我们需要在一个服务层中的事务(editJobPost)内调用另一个具有自己的事务的服务层(checkSuspicion)。

@Transactional(rollbackFor = { RuntimeException.class, EntityException.class })
public JobPostResponseDto editJobPost(EditJobPostRequestDto requestDto) throws EntityException {
    ...
    if (Constants.JOB_POST_ACTIONS.EDIT.equals(requestDto.getAction())) {
        jobPost = checkSuspicion(jobPost, jobPost.getJobType(), jobPost.getStatus(), requestDto); //checkSuspicion had its own transaction.
    }
    entityManager.merge(jobPost);
    ...
}

现在由于editJobPost方法的持续交易,然后在checkSuspicionentityManager出现了分离的问题。

因此,我们将jobPost实体与第一个事务分离,然后将其合并。

更新的方法如下

@Transactional(rollbackFor = { RuntimeException.class, EntityException.class })
public JobPostResponseDto editJobPost(EditJobPostRequestDto requestDto) throws EntityException {
    ...
    entityManager.detach(jobPost); //object detached
    if (Constants.JOB_POST_ACTIONS.EDIT.equals(requestDto.getAction())) {
        jobPost = checkSuspicion(jobPost, jobPost.getJobType(), jobPost.getStatus(), requestDto); //checkSuspicion had its own transaction.
    }
    entityManager.merge(jobPost); //merged later
    ...
}

还必须有其他场景。

希望这能够清除你对分离的和后来持久的实体的疑虑。


0
投票

这可能很有用,例如,在通过某种处理将数据从一个数据库复制到另一个数据库时。

我们从一个会话中获取一个对象,将其分离,更改一些内容,将此对象放到第二个会话中。

© www.soinside.com 2019 - 2024. All rights reserved.