【发布时间】:2012-08-03 10:13:59
【问题描述】:
我有以下Java持久化的情况:
public ReturnCodes startWork() {
sessionBackup = (BaseService<Backup>) ctx.lookup("XYZ/BackupServiceImpl/local");
Backup backup = new Backup();
backup.setStatus(BackupStatus.EXECUTING);
....
sessionBackup.save(Backup) //at this point is not actualy saved into DB
....//try to connect somewhere
if ( !ConnectSuccess) {
sessionBackup.remove(backup);
return ReturnCodes.REQUESTABORT
}
....
}
@Stateless
public class BackupServiceImpl extends BaseServiceImpl<Backup> implements
BaseService<Backup>
{
@Override
protected Class<Backup> getEntityClass()
{
return Backup.class;
}
}
还有BaseServiceImpl的save和remove方法:
public abstract class BaseServiceImpl<T extends Serializable> implements
BaseService<T>
{
protected EntityManagerFactory emf;
public T save(T entity)
{
EntityManager em = emf.createEntityManager();
em.persist(entity);
return entity;
}
public void remove(T entity)
{
EntityManager em = emf.createEntityManager();
try
{
final Method method = getEntityClass().getMethod("getId");
final String id = (String) ((T) method.invoke(entity));
entity = em.find(getEntityClass(), id);
em.remove(entity);
}
catch (final Exception ex)
{
logger.log(Level.WARNING, "Unexpected error", ex);
}
}
}
我不想保存到数据库中以防ConnectSuccess失败,但是remove方法找不到实体(因为还没有进入数据库),返回ReturnCodes.REQUESTABORT后实体是保存。
如何取消保存?
【问题讨论】:
-
您在寻找数据库事务和回滚吗?这个? docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html
标签: java hibernate persistence stateless