如何删除无状态实体Java持久性
我在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
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);
}