2010-08-18 2 views
1

У меня проблема с запуском jpa. После исключения появляется, когда я пытаюсь запустить Login.javaNoViableAltException с использованием jpa

WicketMessage: Невозможно создать страницу с помощью конструктора общественной de.test.pages.LoginPage()

первопричины:

NoViableAltException (93! = [364: 1: selectExpression возвращает [Object node]: (n = aggregateExpression | n = scalarExpression | 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) at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.selectItem (JPQLParser.java:1356) at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.selectClause (JPQLParser.java:1270) at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.selectStatement (JPQLParser.java:351) at org.eclipse.persistence.internal.jpa.parsing.jpql. antlr.JPQLParser.document (JPQLParser.java:275) at org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser.parse (JPQLParser.java:130) at 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. Буй ldEJBQLDatabaseQuery (EJBQueryImpl.java:182) на org.eclipse.persistence.internal.jpa.EJBQueryImpl. (EJBQueryImpl.java:134) на org.eclipse.persistence.internal.jpa.EJBQueryImpl. (EJBQueryImpl.java:118) at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery (EntityManagerImpl.java:1352) at de.test.pages.LoginPage. (Неизвестный источник) at java.lang.reflect.Constructor.newInstance (Конструктор. java: 513) at org.apache.wicket.session.DefaultPageFactory.createPage (DefaultPageFactory.java:192) at org.apache.wicket.session.DefaultPageFactory.newPage (DefaultPageFactory.java:57) at org.apache. wicket.request.target.component.BookmarkablePageRequestTarget.newPage (BookmarkablePageRequestTarget.java:298) at org.a pache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage (BookmarkablePageRequestTarget.java:320) at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents (BookmarkablePageRequestTarget.java:234) at org.apache. wicket.request.AbstractRequestCycleProcessor.processEvents (AbstractRequestCycleProcessor.java:92) at org.apache.wicket.RequestCycle.processEventsAndRespond (RequestCycle.java:1250) at org.apache.wicket.RequestCycle.step (RequestCycle.java:1329) at org.apache.wicket.RequestCycle.steps (RequestCycle.java:1428) at org.apache.wicket.RequestCycle.request (RequestCycle.java:545) at org.apache.wicket.protocol.http.WicketFilter. doGet (WicketFilter.java:479) at org.apache.wicket.protocol.http. WicketFilter.doFilter (WicketFilter.java:312) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:215) at 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.process (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)

метод LoginPage() в Login.java выглядит следующим образом:

общественного LoginPage() {

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(); 

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> 

Хотя таблица должна быть создана автоматически, я должен был создать таблицу на себе.

По крайней мере, компания модель QuickstartUser.java

@Entity общественного класса QuickstartUser { @Id @GeneratedValue (стратегия = GenerationType.TABLE) частное ИНТ идентификатор; private String firstName; private String lastName; частный пароль для строк; личное имя пользователя String;

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; 
} 

}

Спасибо за чтение.

BVA

ответ

1

Я в настоящее время изучает JPA, но я обычно пишу запрос, как

SELECT * FROM quickstart_user

в

ВЫБОР д ОТ quickstart_user д

Может вы пытаетесь изменить свой код и посмотреть, будет ли это работать? В качестве примечания я также обнаружил, что для некоторых моих проектов реализация JP Hibernate работает лучше, чем Eclipse.

+0

Привет, у меня есть результат, и исключение исчезло. Какова идея использования запроса, как вы это делали? –

+0

Синтаксис языка запросов JPA похож на SQL, но он реализует только его подмножество. EntityManager предоставляет createNativeQuery и createNamedQuery, которые разрешают SQL-запросы, а createQuery поддерживает только JQL. –

+0

Это ужасное сообщение об исключении, и я зарегистрировал ошибку (https://bugs.eclipse.org/bugs/show_bug.cgi?id=323038), чтобы изменить ее. Пожалуйста, проголосуйте за ошибку, если вы заинтересованы. –

1

Это на самом деле не ответ на ваш вопрос, но:

Вы никогда не должны вызывать код базы данных внутри переднего концевого компонента, это страшное сочетание модели и представления.

Вы должны создать службу для доступа к своей базе данных (используя JPA или что-то еще) и внедрить эту услугу на свою страницу (используя прослушиватели экземпляров компонента с калиткой или калиткой) или ваше калитки.

Таким образом, вы можете протестировать каждый слой в изоляции

Смежные вопросы