10
votes

Table JPA "Séquence" n'existe pas

base de données: xxx

entité xxx

action xxx

erreur

Info: [AVERTISSEMENT EL]: 2012-01-06 18: 45: 46.77 - Clientsession (17472935) - Exception [Eclipselink-4002] (Services de persistance Eclipse - 2.3.0.v20110604-R9504): org.eclipse.persistence.Exception.Exception.DataBaseException interne Exception: com.mysql.jdbc.Exception.MySQLSysSntaxERrorException: table 'Mazedb.Suence' n'existe pas de code d'erreur: 1146 Call: Séquence de mise à jour SET SEQ_COUNT = SEQ_COUNT +? Où seq_name =? BIND => [2 Paramètres liés] Query: DataModifyQuery (nom = "Séquence" SQL = "Mise à jour SET SEQUENCE SEQ_COUNT = SEQ_COUNT +? Où seq_name =? ")

Info: Erreur: Exception interne: com.mysql.jdbc.Exception.MySQLSYNTAXERRorException: table 'Mazedb.Suence' n'existe pas de code d'erreur: 1146 Call: Séquence de mise à jour SET SEQ_COUNT = SEQ_COUNT +? Où seq_name =? BIND => [2 Paramètres liés] Query: DataModifyQuery (nom = "Séquence" SQL = "Mise à jour SET SEQUENCE SEQ_COUNT = SEQ_COUNT +? Où seq_name =? ")

J'ai essayé l'inverse, avoir deux entités différentes fusionnées par @primarykeyjoincolumn, mais j'ai eu la même erreur.


2 commentaires

Eh bien, le message dit que vous devez avoir une table de séquence. Pourquoi ne le créez-vous pas?


Mais pourquoi aurais-je besoin de cette table s'il n'est pas censé être là?


5 Réponses :


14
votes

Si Eclipselink essaie d'accéder à ce tableau, cela signifie que c'est censé être là. GenerationType.Auto signifie que Eclipselink choisit le type de génération le plus approprié pour votre base de données (MySQL). Dans ce cas, le choix consiste à utiliser un générateur de table, qui a besoin d'une table. Voir http://wiki.eclipse.org/eclipselink/serguide/jpa/basic_jpa_développement/entities / IDS / GénérationValue .

Si vous ne voulez pas utiliser cette stratégie, choisissez un autre.


2 commentaires

Le lien donné est mort.


Je devais créer la table afin de sauver les autres moments de googling Voici le SQL Créer une séquence de table (SEQ_NAME VARCHAR (50) non NULL, SEQ_COUNT Decimal (15), clé primaire (SEQ_NAME))



6
votes

Je n'avais jamais eu cette erreur avant de faire ce genre de chose cent fois. J'ai trouvé que cette erreur était parce que j'ai eu une propriété hibernate pour créer des tables dans le persistence.xml code> mais utilisait Eclipselink:

C'était: p>

    <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
    <!-- or just value="create-tables" -->


1 commentaires

Travaillé pour moi, bien que je n'ai pas eu la première de la propriété définie dans persistance.xml. L'ajout de la propriété suggère a pris l'exception.



-1
votes

Dans le fichier de configuration, org.hibernate.dialect.oracle10gdialect est oublié. En effet, org.hibernate.dialect.mysqldialect devrait être.


0 commentaires

0
votes

@generatedValue (stratégie = générationtype.auto) ressemble à une valeur par défaut fournie par IDE sur la création de l'entité. Toutefois, si vous utilisez org.eclipse.persistence.jpa.persistenceprovider , étant donné la façon dont il traite cette annotation (menant à l'exception étant lancée), La solution la plus simple serait d'utiliser @generatedValue (stratégie = générationtype.entity) à la place.


0 commentaires

0
votes

Cette exception peut se produire même si vous utilisez @generatedValue (stratégie = générationtype.entity) !

de la Eclipselink Wiki :

note : stratégie d'identité est spécifique à la base de données et non prise en charge sur toutes les bases de données. L'identité est prise en charge sur Sybase, DB2, SQL Server, MySQL, Derby, Javadb, Informix, SQL Anywhere, H2, HSQL, Access et Postgres Bases de données.

J'ai changé le serveur de base de données et le client de MySQL vers mariadb, qui n'est pas pris en charge pour generationtype.entitity comme indiqué ci-dessus. Je devais donc ajouter la propriété suivante au persistence.xml : xxx


0 commentaires