Hibernate和Oracle:主键约束违规

时间:2014-12-19 13:56:56

标签: java hibernate primary-key

在我的网络应用程序中,我有多个计划服务,它们在相同的实体上工作(如文章,客户......等)。如果我在运行单个服务时没有问题,但是当我运行两个服务时,我得到一个错误,因为违反了主键唯一约束。 作为主键,我使用生成的Long值:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
public Long getId() {
    return id;
}

每个服务从txt文件读取数据,创建其实体,每20个实体在hibernate会话上执行刷新,然后清除。只有在服务执行结束时才会提交会话。

我该如何解决?

2 个答案:

答案 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")一样使用它。