我有一个具有以下 id 配置的实体:
public class Publication implements Serializable, Identifiable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
}
使用这个生成器(Liquibase 语法):
<createSequence incrementBy="10" sequenceName="sequence_generator" startValue="1" cacheSize="10"/>
和 Spring Data JPA 存储库:
@Repository
public interface PublicationRepository extends JpaRepository<Publication, Long>, JpaSpecificationExecutor<Publication> {
// ...
}
现在我在我的应用程序中创建了大约 250 个Publication没有 id 的新对象,然后执行publicationRepository.saveAll(). 我得到以下异常:
Caused by: javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [mypackage.Publication#144651]
我使用断点进行调试,发现这总是发生在第 50 个对象上,其中分配的 ID 突然被设置为已经存在于已保存对象集中的 ID——因此生成器似乎返回了错误的值。对于少于 50 个对象的集合,它可以正常工作。
还有什么奇怪的:创建的对象 ID 增加了 1,而如果NEXT VALUE FOR sequence_generator在我的数据库上执行,我得到的 ID 以 10 为增量。
我是不是用错了发电机?