最近在学习openJPA,做的小demo老是报错,请教一下,代码如下;
persistence.xml<?xml version="1.0" encoding="UTF-8"?>
<persistence 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" version="1.0">
    
    <persistence-unit name="demo" transaction-type="RESOURCE_LOCAL">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>   
        <properties>
         <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/openjpa"/>
         <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
         <property name="openjpa.ConnectionUserName" value="root"/>
         <property name="openjpa.ConnectionPassword" value="root"/>
         <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/>
    </properties>
    </persistence-unit>
</persistence>
web.xml<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
  <!-- 加载Spring配置文件 -->
  <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
 
  <!-- Spring容器监听器 -->
  <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
 
  <!-- 配置SpringMVC 模块 -->
  <servlet>
  <servlet-name>sjdemo</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  <servlet-name>sjdemo</servlet-name>
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>
 
 
 
 
</web-app>
sjdemo-servlet.xml<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    
     <!-- 启用spring Annotation -->          
     <context:annotation-config/>
     
     <!-- 扫描指定的包,以完成自动注入 -->
     <context:component-scan base-package="com.jzkangta.sjd"></context:component-scan>
     
     <!-- 启动springMVC注解 -->
     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
     
     <!-- 给模型视图添加前后缀 -->
     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass">
      <value>org.springframework.web.servlet.view.JstlView</value>
  </property>          
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
  <property name="suffix">
      <value>.jsp</value>
  </property>
</bean>

<!-- 开始整合JPA -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="demo" />
</bean>

<!-- JPA事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>
     
     
</beans>Person类package com.jzkangta.sjd.entity;import java.io.Serializable;import javax.persistence.*;@Entity
@Table(name="person",catalog="openjpa")
public class Person implements Serializable { @Id @GeneratedValue(strategy=GenerationType.TABLE)
private int id;

@Column(name="personName",unique=false,nullable=false,length=50)
private String name;

@Column(name="password",unique=false,nullable=false,length=50)
private String password; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}package com.jzkangta.sjd.dao.impl;import java.util.List;import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import com.jzkangta.sjd.dao.PersonDAO;
import com.jzkangta.sjd.entity.Person;@Component       //告诉spring这个类不需要配置
@Transactional   //告诉spring这个类是需要事务管理的
public class PersonDaoImpl implements PersonDAO { @PersistenceContext    //通过注解来获得em
EntityManager em;

public boolean checkLogin(String name, String password) {
boolean flag =false;
Query query = em.createQuery("select o from Person o where o.personName=?1 and o.password=?2");
query.setParameter(1, name);
query.setParameter(2, password);
List<Person> list = query.getResultList();
if(list.size()>0){
flag = true;
}
return flag;
}
}
调用checkLogin报如下错:严重: Servlet.service() for servlet sjdemo threw exception
<openjpa-1.2.1-r752877:753278 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: An error occurred while parsing the query filter "select o from Person o". Error message: The name "Person" is not a recognized entity or identifier. Known entity names: []
at org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.parseException(AbstractExpressionBuilder.java:118)
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getClassMetaData(JPQLExpressionBuilder.java:180)
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.resolveClassMetaData(JPQLExpressionBuilder.java:150)
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:225)
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:195)
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateType(JPQLExpressionBuilder.java:188)
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.access$600(JPQLExpressionBuilder.java:69)
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.populate(JPQLExpressionBuilder.java:1756)
at org.apache.openjpa.kernel.jpql.JPQLParser.populate(JPQLParser.java:56)
at org.apache.openjpa.kernel.ExpressionStoreQuery.populateFromCompilation(ExpressionStoreQuery.java:153)
at org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:658)
不知道是何原因