[英]spring crudrepository save with specific id
我想将具有特定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
但是我得到了
Table 'embedded-db.hibernate_sequence' doesn't exist
如何插入具有特定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实现将:
...为特定的数据库选择适当的策略。
( 来源 )
对于您正在使用的数据库(不确定哪个?),这意味着休眠将在预定义的表中查找要使用的下一个ID值。
手动设置ID时,请从变量中删除@GeneratedValue
批注。
我认为您可以使用父类和子类来支持此功能。 您使用no id成员类定义了一个抽象类,并具有两个JPA子类,它们映射到同一张表,但是id策略是不同的。 因此,在代码中,当您要设置id时,可以使用no @GeneratedValue。 另一个带有@GeneratedValue的变量可以支持自动递增的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.