J'essaie d'implémenter certaines entités de base en utilisant Hibernate/JPA. Initialement, le code était déployé sur MySQL et fonctionnait correctement. Maintenant, je le transfère pour utiliser PostgreSQL. En MySQL, ma classe d'entité définit sa clé primaire comme une valeur à long auto-incrémentée avec la syntaxe suivante:Hibernate/JPA et PostgreSQL - Clé primaire?
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
Cependant, j'ai trouvé que je reçois des erreurs avec PostgreSQL lorsque je tente et insérer de nombreux dossiers à un temps. De quoi ai-je besoin pour annoter ma clé primaire afin d'obtenir le même comportement d'auto-incrémentation dans PostgreSQL qu'avec MySQL? Merci pour toute l'aide que vous pourrez fournir!
GenerationType.AUTO ne devrait pas causer de problème avec les bases de données. Pouvez-vous publier l'exception et/ou votre code d'insertion? Il est à noter que sur MySQL, GenerationType.AUTO est converti en type d'incrément alors que sur PostgreSQL, il utilise la séquence par défaut. Voir le doc ici http://docs.jboss.org/hibernate/core/3.5/reference/fr/html/mapping.html#mapping-declaration-id pour une description – ig0774
Je vais essayer une fois de plus et ensuite poster le exception que je reçois. La façon dont mes classes d'entités sont configurées est d'avoir une classe de base abstraite avec l'id défini et l'annotation @MappedSuperclass dessus, puis de dériver le reste de mes entités à partir de là. Pensez-vous que cela va créer un problème avec PostgreSQL? – Shadowman
Insérez-vous avec JPA 'persist()' et 'merge()' ou directement SQL? 'GenerationType.AUTO' signifie que" le fournisseur de persistance doit choisir une stratégie appropriée "(JPA 2.0 Final Release, Section 11.1.17). Cela n'implique pas nécessairement une relation de séquence. Seul 'GenerationType.SEQUENCE' force le fournisseur JPA à utiliser une séquence. La question est actuellement trop vague pour être sûr, mais peut-être Hibernate a-t-il décidé de générer 'id' avec une table sous Postgres et peut-être que vous utilisez SQL en attendant une valeur de séquence par défaut inexistante pour la colonne' id'. S'il vous plaît montrer les relations Postgres (psql's \ d'). –