Hibernate:获取插入计数器

时间:2017-11-28 09:08:19

标签: spring oracle hibernate

我在Oracle 11 RDMBS上使用hibernate 5.2和spring 4.3.11

我面临以下问题:我有一个实体;它的PK由4列组成,其中一列是一种计数器。 要求是增加它的值1。

所以我应该做类似的事情:

select max(counter)+1 from myTable t where t.year=2017 and t.type='test';

这种计数器既不是简单的序列。我需要确保计数器值(这是PK的一部分)在多线程环境(例如web one)中每个客户端是唯一的

到目前为止,我写的是:

一个oracle函数,以便计算计数器 事务隔离SERIALIZABLE的Spring事务方法 在我的交易方法

  • 我调用oracle函数
  • 我得到了计数器值
  • 我将值设置为实体
  • 我保存了实体

我想知道这是否是解决这些问题的好方法。

我无法创建oracle函数或存储过程来保存对象

这是我的交易方法框架:

@Transactional(transactionManager = "hibTx", rollbackFor = DbException.class, readOnly = false, isolation=Isolation.SERIALIZABLE)
public void saveMyEntity(Entity t) throws DbException{
    try
    {
        EntityPK id = t.getId();
        //Oracle DAO is a DAO where I have method to call oracle functions and stored
        Long nextCounter = oracleDao.getNextValue( id.getYear(), id.getType(), t.getCode().longValue() ).longValue();
        id.setCounter(nextCounter);
        t.setId(id);
        repository.persist(t);
    }
    catch (Exception e)
    {
        String msg = "Error; "+e.getMessage();
        logger.error(msg, e);
        throw new DbException(msg);
    }   
}

欢迎任何建议

谢谢

安吉洛

0 个答案:

没有答案