在我的网络应用程序中,我有多个计划服务,它们在相同的实体上工作(如文章,客户......等)。如果我在运行单个服务时没有问题,但是当我运行两个服务时,我得到一个错误,因为违反了主键唯一约束。 作为主键,我使用生成的Long值:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
public Long getId() {
return id;
}
每个服务从txt文件读取数据,创建其实体,每20个实体在hibernate会话上执行刷新,然后清除。只有在服务执行结束时才会提交会话。
我该如何解决?
答案 0 :(得分:3)
Oracle仅支持生成密钥的序列。将序列添加到数据库中:
CREATE SEQUENCE ARTICLE_SEQ;
将注释更改为:
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="articleSequence")
@SequenceGenerator(name="articleSequence", sequenceName="ARTICLE_SEQ",allocationSize=1)
最好为每个表/类型使用单独的序列。
答案 1 :(得分:0)
在数据库中创建序列,并像@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_NAME")
一样使用它。