2016-12-03 47 views
0

有一种情况 RECORD_ID被自动增量的一些操作如何防止异常自动增量?

@Id 
@GeneratedValue(strategy = IDENTITY) 
@Column(name = "record_id", unique = true, nullable = false) 
public Integer getRecordId() { 
    return recordId; 
} 

,但有可能是错误的实体分数

Session session = HibernateUtil.getSessionFactory().openSession(); 
session.beginTransaction(); 
Score record = new Score(); 
try { 
    session.save(record); 
} catch (ConstraintViolationException e) { ... 

的问题是,在错误RECORD_ID柜台internaly递增 和未来成功保存操作时数据库中存在一定的差距,例如,其中69和71是成功操作的写入,但是在70ts时出现错误。

69 1 6 2016-12-03 
71 2 6 2016-12-03 

有没有办法如何防止错误增量?

回答

0

有没有办法避免这一点,但你不应该在乎无论是。

序列的增量是单向操作。这是为了表现。增加序列必须是原子操作,因为多个进程可能需要同时插入行,这需要交织ID。

在插入物爆炸或某人手动进行某些咀嚼某些ID的操作或许多原因的情况下,预计ID会出现间隙。你不能完全防止它。

重要的是,您的应用程序不应该关心差距。自动递增键是一个代理键,其值不应该依赖于任何特定的值。如果您的系统需要连续的ID,那是一种设计气味。

0

如果使用SEQUENCE Generation for ID而不是IDENTITY,可以解决此问题。

只有在表中创建记录时,序列才会递增。