J'ai un problème pour faire fonctionner jpa. A la suite exception apparaît lorsque je tente d'exécuter le Login.javaNoViableAltException utilisant jpa
WicketMessage: instanciation page à l'aide constructeur de.test.pages.LoginPage public()
cause racine:
NoViableAltException (93! = [364: 1: selectExpression renvoie [Nœud d'objet]: (n = aggregateExpression | n = expression scalaire | OBJECT LEFT_ROUND_BRACKET n = variableAccessOrTypeConstant RIGHT_ROUND_BRACKET | n = constructorExpression | n = mapEntryExpression);]) at org.eclipse.persistence. internal.jpa.parsing.jpql.antlr.JPQLParser.selectExpression (JPQLParser.java:5893) à org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.selectItem (JPQLParser.java:1356) à org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.selectClause (JPQLParser.java:1270) à org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.selectStatement (JPQLParser.java:351) à org.eclipse.persistence.internal.jpa.parsing.jpql. antlr.JPQLParser.document (JPQLParser.java:275) à org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser.parse (JPQLParser.java:130) à org.eclipse.persistence.internal.jpa. parsing.jpql.JPQLParser.buildParseTree (JPQLParser.java:91) à org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery (EJBQueryImpl.java:207) à org.eclipse.persistence.internal.jpa.EJBQueryImpl. bui ldEJBQLDatabaseQuery (EJBQueryImpl.java:182) à org.eclipse.persistence.internal.jpa.EJBQueryImpl. (EJBQueryImpl.java:134) à org.eclipse.persistence.internal.jpa.EJBQueryImpl. (EJBQueryImpl.java:118) à org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery (EntityManagerImpl.java:1352) à de.test.pages.LoginPage. (Source inconnue) à java.lang.reflect.Constructor.newInstance (Constructeur. java: 513) à org.apache.wicket.session.DefaultPageFactory.createPage (DefaultPageFactory.java:192) à org.apache.wicket.session.DefaultPageFactory.newPage (DefaultPageFactory.java:57) à org.apache. wicket.request.target.component.BookmarkablePageRequestTarget.newPage (BookmarkablePageRequestTarget.java:298) at org.a pache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage (BookmarkablePageRequestTarget.java:320) à org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents (BookmarkablePageRequestTarget.java:234) à org.apache. wicket.request.AbstractRequestCycleProcessor.processEvents (AbstractRequestCycleProcessor.java:92) à org.apache.wicket.RequestCycle.processEventsAndRespond (RequestCycle.java:1250) à org.apache.wicket.RequestCycle.step (RequestCycle.java:1329) à org.apache.wicket.RequestCycle.steps (RequestCycle.java:1428) à org.apache.wicket.RequestCycle.request (RequestCycle.java:545) à org.apache.wicket.protocol.http.WicketFilter. doGet (WicketFilter.java:479) à org.apache.wicket.protocol.http. WicketFilter.doFilter (WicketFilter.java:312) à org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:215) à org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:188) à org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:213) à org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:172) à org.apache.catalina.core. StandardHostValve.invoke (StandardHostValve.java:127) à org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:117) à org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:108) à org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:174) à org.apache.coyote.http11.Http11Processor.http11 (Http11Processor.java:873) à org.apache.coyote.http11.Http11BaseProtocol $ Http11ConnectionHandler.processConnection (Http11BaseProtocol.java:665) à org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket (PoolTcpEndpoint.java:528) à org.apache. tomcat.util.net.LeaderFollowerWorkerThread.runIt (LeaderFollowerWorkerThread.java:81) à org.apache.tomcat.util.threads.ThreadPool $ ControlRunnable.run (ThreadPool.java:689) à java.lang.Thread.run (Thread.java:637)
La méthode LoginPage() dans Login.java ressemble à ceci:
LoginPage public() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("quickstartUser");
EntityManager em = factory.createEntityManager();
// Read the existing entries
Query q = em.createQuery("SELECT * FROM quickstart_user");
// Persons should be empty
// Do we have entries?
int createNewEntries = q.getResultList().size();
Label label = new Label("result", "Result: ");
add(label);
// It is always good practice to close the EntityManager so that
// resources are conserved.
em.close();
Le persistance.xml
<persistence-unit name="quickstartUser" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.jdbc.driver" value="org.postgresql.Driver" />
<property name="eclipselink.jdbc.url" value="jdbc:postgresql://localhost:5432/test" />
<!-- I work in this example without user/password.-->
<property name="eclipselink.jdbc.user" value="" />
<property name="eclipselink.jdbc.password" value="" />
<!-- EclipseLink should create the database schema automatically -->
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />
</properties>
</persistence-unit>
Bien que le tableau doit être créé automatiquement, J'ai dû créer la table sur moi-même.
Au moins le modèle d'entité QuickstartUser.java
@Entity public class QuickstartUser { @Id @GeneratedValue (stratégie = GenerationType.TABLE) id private int; private Chaîne firstName; private Chaîne lastName; private Mot de passe String; private Chaîne nom d'utilisateur;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
Merci pour la lecture.
BVA
Bonjour, j'ai obtenu un résultat et l'exception est partie. Quelle est l'idée d'utiliser la requête comme vous l'avez fait? –
La syntaxe du langage de requête JPA est similaire à SQL, mais il n'en implémente qu'un sous-ensemble. EntityManager fournit createNativeQuery et createNamedQuery qui autorisent les requêtes SQL, tandis que createQuery ne prend en charge que JQL. –
Ceci est un message d'exception terrible et j'ai déposé un bug (https://bugs.eclipse.org/bugs/show_bug.cgi?id=323038) pour qu'il change changé. S'il vous plaît voter pour le bug si vous êtes intéressé. –