Ya, you say you do use a transaction but where are you calling "session.beginTransaction()" in your code? You're not. So you're not really using a transaction.
Try this:
Code:
session = PersistenceManager.getSession();
Transaction tx = session.beginTransaction(); // NEW
EmailVerificationData data =
(EmailVerificationData) session.load(
EmailVerificationData.class,
new Integer(emailVerificationData.getEmailVerificationId()));
mLogger.finer("Data loaded from the database is " +data.toString());
data.setStatus(emailVerificationData.getStatus());
data.setVerificationTime(emailVerificationData.getVerificationTime());
session.saveOrUpdate(data);
session.flush();
tx.commit(); // NEW
Cheers,
Rob