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:
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:
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:
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:
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:
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 !