Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除无状态实体Java持久性_Java_Hibernate_Persistence_Stateless - Fatal编程技术网

如何删除无状态实体Java持久性

如何删除无状态实体Java持久性,java,hibernate,persistence,stateless,Java,Hibernate,Persistence,Stateless,我在Java持久化方面遇到以下情况: public ReturnCodes startWork() { sessionBackup = (BaseService<Backup>) ctx.lookup("XYZ/BackupServiceImpl/local"); Backup backup = new Backup(); backup.setStatus(BackupStatus.EXECUTING); .... sessionBacku

我在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;
    }
}
如果
ConnectSuccess
失败,我不想保存到数据库中,但是
remove
方法找不到实体(因为还没有进入数据库),在返回
ReturnCodes.REQUESTABORT之后,实体被保存。

如何取消保存?

通常,在这种情况下,您只需执行setRollbackOnly()

您还可以抛出一个异常,该异常将仅触发回滚

顺便在代码中执行此操作:

catch (final Exception ex)
{
  logger.log(Level.WARNING, "Unexpected error", ex);
}

太宽,将阻止回滚功能。

是否正在查找数据库事务和回滚?这个?所以,在读了一点之后,我想要的是在方法的中间提交CMT,而不是在它的结尾。这可能吗?怎么做?@Alex是的,这是可能的。您想调用YouDao.getEntityManager().flush();它不使用flush,实际上它会阻塞表数据库(我在SQL manager中检查,在查询运行时),直到方法结束..:(亚历克斯)为什么你首先要在你的方法中间提交?因为如果你看我的伪代码,我的方法在它里面有一个服务器备份,并且在它用执行状态标记备份之后,我需要把它保存到数据库中,然后继续备份作业,在备份作业完成后,它更新数据库中的备份信息。
catch (final Exception ex)
{
  logger.log(Level.WARNING, "Unexpected error", ex);
}