gpt4 book ai didi

java - Spring Data JPA 使用 EclipseLink 作为 JPA 提供者 : possible bug in EclipseLink?

转载 作者:行者123 更新时间:2023-11-29 13:30:22 28 4
gpt4 key购买 nike

我使用 Spring Data JPA 和 EclipseLink 2.5.2 作为我的 JPA 提供程序。我使用的数据库是 PostgreSQL。我有一个具有自动递增序列号的表,如下所示:

CREATE TABLE segment
(
caseid character varying(32),
segmentid serial NOT NULL,
segstarttime timestamp without time zone,
segendtime timestamp without time zone,
CONSTRAINT segment_pkey PRIMARY KEY (segmentid)
);

在Java数据类Segment中,我定义为:

@Entity
@Table(name="segment")
public class Segment {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="segment_segmentid_seq")
@SequenceGenerator(name="segment_segmentid_seq", sequenceName="segment_segmentid_seq", allocationSize=1)
private Integer segmentID;
private String caseID;
private Timestamp segStartTime;
private Timestamp segEndTime;
}

然后我有以下 Spring Data JPA 代码来测试插入到数据库的函数:

    Segment seg2 = new Segment();
seg2.setCaseID("000014");
seg2.setSegStartTime(Timestamp.valueOf("2014-08-01 10:36:39"));
seg2.setSegEndTime(Timestamp.valueOf("2014-08-02 14:22:08"));
seg2 = repository.save(seg2);

Segment seg3 = repository.findOne(seg2.getSegmentID());

当我运行上面的测试代码时,发生了一些奇怪的事情。上述代码只向表中插入一条记录,调用上述代码后序列号segmentid只加1。但是,我发现调用此 save() 后,自动增量 segmentid 增加了 2。但是如果我直接在 PostgreSQL 命令行中输入 SQL 查询:

INSERT INTO segment (caseid, segstarttime, segendtime) VALUES ('000014', '2014-08-01 10:36:39', '2014-08-02 14:22:08'); 

它工作正常,自动递增序列号 segmentid 仅在插入后递增 1。我真的对这种行为感到困惑。然后我将我的 JPA 提供程序从 EclipseLink 2.5.2 更改为 Hibernate 4.3.6 并尝试再次运行上面的 Java 代码。正常工作,调用CrudRepository类的save()方法后,segmentid也加1。

那么这可能是 EclipseLink JPA 的错误吗?或者是由于 Spring Data JPA 与 EclipseLink 集成中的一些错误?

最佳答案

序列生成器通常意味着 EclipseLink 将该列的值放入 INSERT 语句中。除了如果你有 AUTOINCREMENT 列(SERIAL),那么你应该将生成器设置为 IDENTITY 以匹配你在那里的列。 SEQUENCE 表示它将从序列中获取其值(惊喜),而不是自动递增。

关于java - Spring Data JPA 使用 EclipseLink 作为 JPA 提供者 : possible bug in EclipseLink?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25247863/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com