Comment créer un générateur d'identifiant en JPA à partir d'une table n'ayant qu'une seule colonne

François

Je construis actuellement un modèle JPA à partir d'une ancienne base de données et j'ai besoin de conseils. Dans cette base de données, les identifiants ont été générés à partir d'une table object_idn'ayant qu'une seule colonne PK appelée next_id. Celui-ci next_idest incrémenté à chaque fois qu'un nouvel objet est créé par le logiciel Java qui l'utilise.

Mon objectif est d'utiliser la même table pour générer des identifiants pour le modèle JPA. Est-ce quelque chose de possible ? j'ai essayé d'utiliser

@GeneratedValue(strategy = GenerationType.TABLE, generator = "myGenerator")
@TableGenerator(name = "myGenerator", table = "object_id", valueColumnName = "next_id")

mais cela ne semble pas fonctionner car la object_idtable n'a qu'une seule colonne (pas de colonne de nom de séquence).

J'ai les limitations suivantes :

  1. Le logiciel dont j'ai parlé précédemment sera utilisé jusqu'à ce que sa mise à jour soit terminée.
  2. Il s'agit d'un logiciel commercial. Son développement et son utilisation doivent se poursuivre. Il est impossible d'arrêter de le développer et de le maintenir.
  3. Cette mise à jour peut prendre au moins un an. La mise à jour se fera au fur et à mesure. La base de données et l'interface utilisateur seront mises à jour en premier. Ensuite, le noyau de calcul suivra.
  4. Le calcul est lancé à partir de l'interface utilisateur dans un thread séparé. Une fois l'interface utilisateur mise à jour, le même noyau de calcul en sera appelé jusqu'à ce que le noyau soit également mis à jour.
  5. Une fois la mise à jour du noyau terminée, il sera alors possible d'utiliser un autre type de génération d'identifiant. Jusque-là, la génération d'identifiants dans le modèle JPA doit fonctionner comme celle effectuée par le logiciel.
  6. Les identifiants doivent être créés de la même manière pour éviter les clés en double.
  7. Je suis tout à fait conscient que la génération d'identifiants à partir d'une table avec JPA n'est pas la meilleure option. Mais c'est du code hérité. Je dois m'en occuper.

J'ai oublié de mentionner que le développement de ce logiciel a commencé en 2000. A cette époque, il n'y avait pas d'outils comme Hibernate ou JPA. Un outil de persistance a été développé à partir de zéro et est toujours utilisé aujourd'hui. Le but est de s'en débarrasser et d'utiliser une technologie plus récente.

Des conseils ? Merci d'avance.

Kayaman

Vous pouvez créer votre propre générateur en utilisant @GenericGenerator. Cela le rend cependant dépendant d'Hibernate, mais vous n'avez pas beaucoup de choix. Personnalisez ensuite la stratégie de génération afin que seul le nom de la table soit utilisé.

Voir @TableGenerator peut-il enregistrer le dernier identifiant utilisé dans la table au lieu du prochain disponible ?

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive