gpt4 book ai didi

java - spring crudrepository 保存特定的 id

转载 作者:行者123 更新时间:2023-11-29 04:25:04 25 4
gpt4 key购买 nike

我想使用特定的 ID 将数据插入(而不是更新)到我的存储库中,但是每当我这样做时,Id 都会被忽略,并且插入的条目只是序列中的下一个 ID。

Entity entity = new Entity();
entity.setId(4l);
//..
Entity saved = repository.save(entity);
System.out.println(saved.getId()); // is 1l

这是我的设置的样子

@Entity
@Table(name = "ENTITY")
public class Entity {

@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

//...

}

@Repository
public interface SomeRepository extends CrudRepository<Entity, Long> {

}

我还尝试将生成策略更改为 AUTO 但后来我得到了

表“embedded-db.hibernate_sequence”不存在

如何在允许生成 ID 的同时插入具有特定 ID 的数据?

更新

好的,所以我发现其中一个解决方案是强制使用特定序列来生成 id 并使用生成策略 AUTO,如下所示:

@Id
@Column(name = "ID")
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_seq_gen")
@SequenceGenerator(name="my_seq_gen", sequenceName="actual_seq_name")
private Long id;

但是我使用 mariaDb 作为我的测试环境,它不支持序列,所以这个解决方案对我不起作用。还有其他方法吗?

最佳答案

您收到错误是因为 AUTO 意味着 JPA 实现将:

...pick an appropriate strategy for the particular database.

( Source )

对于您正在使用的数据库(不确定是哪个?),这意味着 hibernate 会在预定义的表中查找要使用的下一个 ID 值。

当您手动设置 ID 时,请从您的变量中删除 @GeneratedValue 注释。

关于java - spring crudrepository 保存特定的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46821002/

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