IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Unknown abstract schema type TOPLINK


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut Unknown abstract schema type TOPLINK
    bonjour,

    j'ai une erreur que je n'arrive pas à résoudre ^^. j'ai regardé par ici et par là, j'ai trouvé des petits trucs mais rien n'y fait. en fait, j'ai une architecture très simple pour le moment : BDD <=> JPA/TOPLINK.

    j'ai une classe (annotée JPA) tout bête "Account" avec les champs : id, version, username, password

    la voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    @Entity
    @Table(name = "account")
    public class Account implements Serializable {
     
      @Id
      @Column(name = "id", nullable = false)
      @GeneratedValue(strategy = GenerationType.AUTO)
      private int id;
     
      @Column(name = "version", nullable = false)
      @Version
      private int version;
     
      @Column(name = "username", length = 20, nullable = false, unique = true)
      private String username;
     
      @Column(name = "password", length = 40, nullable = false)
      private String password;
     
      protected Account() {
      }
     
      public Account(String username, String password) {
        setUsername(username);
        setPassword(password);
      }
     
      @Override
      public String toString() {
        return String.format("[%d,%d,'%s','%s']", getId(), getVersion(), getUsername(), getPassword());
      }
     
      @Override
      public boolean equals(Object obj) {
        Account a = (Account) obj;
        return a == null ? false : a.getUsername().equals(username) && a.getPassword().equals(password);
      }
     
      // setters & getters ...
    }
    voici maintenant mon fichier persistence.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
      <persistence-unit name="org.pro.server.punit" transaction-type="RESOURCE_LOCAL">
        <provider>oracle.toplink.essentials.PersistenceProvider</provider>
        <class>org.pro.server.entity.model.client.Account</class>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
          <property name="toplink.jdbc.user" value="root"/>
          <property name="toplink.jdbc.password" value="******"/>
          <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/dbname"/>
          <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
          <property name="toplink.ddl-generation" value="drop-and-create-tables"/>
        </properties>
      </persistence-unit>
    </persistence>
    pour terminer, j'ai fais une classe de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public class PersistenceTest extends TestCase {
     
      private EntityManagerFactory emf = null;
     
      private EntityManager em = null;
     
      private String PUNIT_NAME = "org.pro.server.punit";
     
      @Override
      protected void setUp() {
        emf = Persistence.createEntityManagerFactory(PUNIT_NAME);
        em = emf.createEntityManager();
      }
     
      @Override
      protected void tearDown() throws Exception {
        em.close();
        emf.close();
      }
     
      public void testPersistence() {
        String username = "admin";
        String password = "azerty";
     
        // ...
     
        String query = "SELECT ACC FROM account AS ACC";
        query += " WHERE ACC.username = :username";
        query += " AND ACC.password = :password";
     
        Query q = em.createQuery(query);
        q.setParameter("username", username);
        q.setParameter("password", md5Password);
     
        Account b = (Account) q.getSingleResult();
     
        // ...
      }
    }
    alors, quand je lance mon test, la connexion s'établie correctement, les tables sont crées si elles n'existent pas et la requête provoque l'erreur qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager
            at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:194)
            at org.pro.test.entity.PersistenceTest.testPersistence(PersistenceTest.java:60)
    Caused by: Exception [TOPLINK-8034] (Oracle TopLink Essentials - 2.0 (Build 35 (02/16/2007))): oracle.toplink.essentials.exceptions.EJBQLException
    Exception Description: Error compiling the query [SELECT ACC FROM account AS ACC WHERE ACC.username = :username AND ACC.password = :password]. Unknown abstract schema type [account].
    d'où il faut retenir je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error compiling the query [SELECT ACC FROM account AS ACC WHERE ACC.username = :username AND ACC.password = :password]. Unknown abstract schema type [account]
    c'est une histoire de schéma apparemment, mais je ne vois pas comment y remédier... en local, je suis sur mysql 5.4.3 et j'ai une base "dbname" avec la table account dedans bien sûr.

    vous avez déjà été confronté au problème ??

    merci d'avance !

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Elle est là ton erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ACC FROM account AS ACC WHERE ACC.username = :username AND ACC.password = :password]. Unknown abstract schema type [account]
    Ta classe persistence doit commencer par une majuscule==> Account
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Account implements Serializable {

  3. #3
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    merci beaucoup ! c'était bien çà !
    je n'avais pas pensé a ca car la table crée était bien "account" et, de plus, j'ai mis @Table(name = "account"), je pensais donc que c'était déjà fait !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Unknown abstract schema type
    Par ekremyilmaz dans le forum JPA
    Réponses: 6
    Dernier message: 10/03/2009, 21h01
  2. Itérateur : Abstraction du type de la collection
    Par three minute hero dans le forum SL & STL
    Réponses: 23
    Dernier message: 28/11/2007, 20h22
  3. Réponses: 3
    Dernier message: 08/08/2007, 14h17
  4. [XSLT] Type XML Schéma et XSL
    Par ploxien dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 18/05/2006, 07h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo