Je souhaite insérer (pas mettre à jour) les données dans mon référentiel avec des ID spécifiques, mais chaque fois que je le fais, les ID sont ignorés et les entrées insérées ont simplement l'ID suivant dans la séquence.spring crudrepository enregistrer avec ID spécifique
Entity entity = new Entity();
entity.setId(4l);
//..
Entity saved = repository.save(entity);
System.out.println(saved.getId()); // is 1l
Voilà comment ma configuration ressemble
@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> {
}
J'ai aussi essayé de changer la stratégie de génération en AUTO
mais je reçois
Table 'embedded-db.hibernate_sequence' doesn't exist
Comment puis-je insérer des données avec ID spécifique tout en permettant également la création de l'ID?
UPDATE
Ok, alors je découvert que l'une des solutions oblige à utiliser une séquence spécifique pour générer l'ID et en utilisant la stratégie de génération AUTO
comme ceci:
@Id
@Column(name = "ID")
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_seq_gen")
@SequenceGenerator(name="my_seq_gen", sequenceName="actual_seq_name")
private Long id;
Cependant, je utilisez mariaDb
pour mon test env et il ne supporte pas les séquences, donc cette solution ne fonctionne pas pour moi. Y a-t-un autre moyen de faire ça?
Cela fonctionne quand je l'insère avec ID, mais j'en ai besoin aussi pour générer des identifiants quand ils ne sont pas fournis. En ce qui concerne la base de données, je ne peux vraiment pas dire que pour tester en local j'utilise MariaDb, et en production c'est sur le cloud amazon qui fonctionne sur qui sait quoi. – Benedictus
@Benedictus alors c'est un problème subtilement différent (et pas quelque chose que vous avez mentionné dans votre question originale!). Comme la réponse de fartpig l'indique, une solution pragmatique serait d'avoir une classe 'AbstractEntity', puis d'avoir deux classes enfants avec un comportement d'allocation d'identifiant différent. (J'espère que vous avez une bonne stratégie pour éviter les collisions !!!) – Catchwa