我想插入(不更新)数据到我的存储库与特定的ID,但每当我这样做的ID被忽略,插入的条目只是序列中的下一个ID。春季crudrepository保存与特定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的?
UPDATE
好了,我发现的解决方案之一是迫使使用特定的序列生成的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
作为我的测试环境,并且它不支持序列,所以这个解决方案对我不起作用。有没有其他方法可以做到这一点?
它在我用ID插入时起作用,但当它们没有提供时,我也需要它来生成id。至于数据库,我真的不能告诉我在本地测试我使用MariaDb,而在生产中它是在亚马逊云上运行,谁知道什么。 – Benedictus
@Benedictus然后这是一个微妙的不同的问题(而不是你在原来的问题中提到的东西!)。正如Fartpig的回答所述,一个实用的解决方案是拥有一个'AbstractEntity'类,然后有两个具有不同id分配行为的子类。 (我希望你有一个好的策略来避免碰撞!!!) – Catchwa