我想在2分钟后更新一个实体字段(在下面的测试代码中是10秒)。代码毫无例外地运行,并打印了其中的消息,但实体并没有真正更新。可能有什么问题?
以下是我使用的代码:
@Transactional
public void scheduleTimer(UserSMSEntity userSMSEntity) {
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
@Transactional
public void run() {
userSMSEntity.lastSMSCode = -1;
update(userSMSEntity);
System.out.println("TIMER TASK");
}
};
timer.schedule(timerTask, 10000);
}
下面是“更新”方法的代码:
@Transactional
public void update(T entity) {
entity.setLastModificationDate(new Date());
entityManager.merge(entity);
logger.debug(entity.toString() + " Updated!");
}
我在计时器任务中使用以下代码修复了它
Session session = sessionFactory.openSession();
session.beginTransaction();
UserSMSEntity userSMSEntity = getEntityByUserId(userId);
UserSMSEntity userSMSEntity1 = entityManager.find(UserSMSEntity.class, userSMSEntity.getId());
userSMSEntity1.lastSMSCode = -1;
session.update(userSMSEntity1);
session.getTransaction().commit();
session.close();
下面是我如何将sessionFactory与autowired结合使用的:
@Autowired
SessionFactory session;
在applicationContext中,我声明了一个Bean,如下所示:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="moduleDataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
<property name="packagesToScan"
value="you package"/>
</bean>