Spring 交易更新实体

Spring transaction update entity

我有一个问题。我创建了 Base Reposiotry:

@Transactional
public abstract class BaseRepository<T extends AbstractEntity> {
    public T read(Long id , Class<T> classEntity) {
        if(id == null || classEntity == null) {
            throw new NullPointerException();
        }
        T result = entityManager.find(classEntity , id);
        return result;
    }

}

我还从 BaseRepository 扩展了存储库

public abstract class PrepareRepository<T extends AbstractEntity> extends BaseRepository<T> implements PrepareEntity<T> {
    @Override
    public T read(Long id, Class<T> classEntity) {
        return prepare(super.read(id, classEntity));
    }

我在读取后更改实体时为 PrepareRepository 创建了一些实现

 @Override
    public User prepare(User entity) {
       entity.setLogin("some");
       return entity;
}

我使用 OpenEntityManagerInViewFilter。而这个片段来自 applicationContext.xml

<aop:aspectj-autoproxy/>
    <tx:annotation-driven transaction-manager="transactionManager" />
    <tx:annotation-driven proxy-target-class="true" />
    <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

终于有问题了。在数据库中,我有一个用户登录名='AdminUser' 和Id=1。当我调用方法读取时 - 在 'some' 上的数据库用户更改登录。在日志中,我看到了对数据库的更新请求。我可以解决这个问题吗?

不,你无法修复它。因为有 opensessioninviewfilter 那里有一个事务。所以最好的办法是在更改对象之前克隆它。