我有问题让jpa运行。采用构造公共de.test.pages.LoginPage()无法实例页面NoViableAltException使用jpa
根源:
NoViableAltException(当我尝试运行Login.java
WicketMessage出现以下异常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。在org.eclipse.persistence.internal.jpa.EJBQueryImpl的org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:207) 处使用parsing.jpql.JPQLParser.buildParseTree(JPQLParser.java:91) 。 BUI 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。(Unknown Source) at java.lang.reflect.Constructor.newInstance(Constructor。 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在org.apache的org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234) (pache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320) )。在org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)处的org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250) 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。在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)处, at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) at org.apache.catalina.core。 StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at 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) at org.apache.tomcat.util.threads.ThreadPool $ ControlRunnable.run(ThreadPool.java:689) at 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) 私人诠释ID; private String firstName; private String lastName; 私人字符串密码; 私人字符串用户名;
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
嗨,我得到了一个结果,异常消失了。关于如何使用查询的想法是什么? – 2010-08-18 09:20:11
JPA查询语言的语法与SQL类似,但它只实现它的一个子集。 EntityManager提供允许SQL查询的createNativeQuery和createNamedQuery,而createQuery只支持JQL。 – 2010-08-18 09:55:21
这是一个可怕的异常消息,我已经提交了一个错误(https://bugs.eclipse.org/bugs/show_bug.cgi?id=323038),让它改变了。如果您有兴趣,请投票选出错误。 – 2010-08-18 14:43:22