增量函数没有得到下一个序列值
本文关键字:下一个 函数 | 更新日期: 2023-09-27 18:13:36
当我尝试用NHibernate保存一个实体时,我得到以下错误:
System.Data.OracleClient.OracleException (0x80131938): ORA-00001: unique constraint (FEMADEV.TRN_INFLOW_DETAILS_HIS_PK) violated
My Controller Code:
TrnInflowDetailsHis trnInflowDetailsHis = Mapper.Map<TrnInflowDetailsHis>(trnInflowDetailsAud);
trnInflowDetailsHis.InflowSeq = trnInflowDetailsAud.Id;
trnInflowDetailsHisService.Add(trnInflowDetailsHis);
映射代码:
public class TrnInflowDetailsHisMap : ClassMap<TrnInflowDetailsHis>
{
public TrnInflowDetailsHisMap()
{
Table("TRN_INFLOW_DETAILS_HIS");
LazyLoad();
Id(x => x.Id).Column("INFLOW_ID").GeneratedBy.Increment();
Map(x => x.InflowSeq).Column("INFLOW_SEQ");
Map(x => x.TranRef).Column("TRAN_REF");
Map(x => x.Currency).Column("CURRENCY");
}
}
这里的问题是,GeneratedBy.Increment()
工作良好,但有时它不增加下一个序列值。我不知道是什么问题。所以请任何人帮助我找到解决方案。
我怀疑问题更多是关于多并发实例,而不是increment
生成器中的错误
例外ORA-00001意味着:
UPDATE或INSERT语句试图插入重复键。对于在DBMS MAC模式下配置的可信Oracle,如果在不同级别存在重复条目,您可能会看到此消息。
换句话说,有人已经插入ID值,当前线程试图使用。这很容易发生在多应用程序实例访问相同的数据库与ID生成器Increment
。
文档5.1.5.1。发电机:
增量
- 生成任何整数类型的标识符,这些标识符只有在没有其他进程向同一表插入数据时才唯一。
所以,只需将这个生成器更改为其他任何东西。increment
可能用于开发,或者用于几乎不可变的类型。或者,如果您可以确定,一次只有一个实例(一个应用程序)在运行。