0
我是新來的休眠。我有一個事務,失敗與HibernateException,但表後更改提交。這裏是代碼:(休眠)表失敗後提交
public StoreResult store(Entry entry)
{
Session session = HibernateUtility.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
try
{
String id;
if (entry.getStatus() == Entry.Status.PUBLISHED)
{
id = TitleToURLConverter.convert(entry.getTitle());
}
else
{
id = "temp_";
}
if (entry.getId() == null)
{
entry.setId(id);
session.save(entry);
}
else
{
session.update(entry);
session.createQuery("update Entry set id = :newId where id = :oldId")
.setString("newId", id)
.setString("oldId", entry.getId())
.executeUpdate();
session.refresh(entry);
}
transaction.commit();
return StoreResult.SUCCESS;
}
catch (RuntimeException e)
{
transaction.rollback();
if (e instanceof ConstraintViolationException) return StoreResult.DUPLICATE_ID;
throw e;
}
finally
{
session.close();
}
}
編輯:顯然InnoDB不會回滾事務上的重複鍵錯誤,但只有語句。我希望事務始終回滾到任何錯誤。
編輯2:忽視這一點。我正在使用MyIsam。
你得到的異常的細節是什麼? – 2010-08-01 02:11:40
這是一個ConstraintViolationException,因爲表中存在重複的id。這意味着存在具有相同ID的條目。我想處理它並向用戶顯示這樣的消息。感謝您的答覆! transaction.wasCommited()返回false。 – 2010-08-01 02:18:45
現在您已經可以工作了,請考慮將會話和事務實例創建置於使用語句中以正確處理。 – 2010-08-01 12:13:55