У меня есть одна проблема. Я создаю базы Reposiotry:Объект обновления транзакции Spring
@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. И этот фрагмент из приложенияContext.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>
И наконец вопрос. В databse у меня есть один пользователь с login = 'AdminUser' и Id = 1. Когда я вызываю метод read-in database, пользователь меняет логин на «some». В журналах я видел запрос на обновление в DataBase. Могу ли я это исправить?
Я не понимаю. Вы извлекаете управляемый объект из базы данных, меняете свой логин и удивляетесь, что выполняется запрос для обновления входа в базу данных? Почему вы изменяете логин объекта, если вы не хотите, чтобы логин был изменен? Это не ошибка, это особенность: управляемые объекты ... управляются: их состояние сохраняется JPA. В этом весь смысл использования ORM. –
Если я изменяю объект вне репозитория, без аннотации Transactional, thats all rights, но я хочу просто подготовить объект для пользователя, без изменения в базе данных. Это невозможно? –