エンティティフィールドを2分後(テストのために以下のコードで10秒)に更新したいとします。コードは例外なく実行され、メッセージは印刷されますが、エンティティは実際には更新されません。何が問題なのでしょうか? は、ここで私が使用したコードです:HibernateでTimerTaskのエンティティを更新する方法
@Transactional
public void update(T entity) {
entity.setLastModificationDate(new Date());
entityManager.merge(entity);
logger.debug(entity.toString() + " Updated!");
}
EDIT: 私はタイマータスク
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();
内部怒鳴るコードを使用して、それを修正
@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);
}
、ここでは、 "更新" メソッドのコードです
ここで私はautowiredでsessionFactoryを使用しました:
@Autowired
SessionFactory session;
とのApplicationContextに私が怒鳴ると豆を宣言:
<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>
上の効果を持っていないあなたはspirngを使うのですか? – xyz
@xyz yea私は春を使用し、 "更新"はどこでもうまくいきますが、timertaskにはありません – Mahan