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 :
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
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 ... }
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 <?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>
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
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(); // ... } }
d'où il faut retenir je pense :
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].
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.
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]
vous avez déjà été confronté au problème ??
merci d'avance !
Partager