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 那里有一个事务。所以最好的办法是在更改对象之前克隆它。
我有一个问题。我创建了 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 那里有一个事务。所以最好的办法是在更改对象之前克隆它。