Java ObjectDB:找不到持久性异常类型错误301

Java ObjectDB:找不到持久性异常类型错误301,java,jpa,persistence.xml,objectdb,Java,Jpa,Persistence.xml,Objectdb,在学习本教程时: 我收到以下错误: Exception in thread "main" [ObjectDB 2.5.4_05] javax.persistence.PersistenceException Type tutorial.model.Point is not found (error 301) at com.objectdb.jpa.EMImpl.persist(EMImpl.java:437) at objectdb.tutorial.main.Main.main(Main.j

在学习本教程时:

我收到以下错误:

Exception in thread "main" [ObjectDB 2.5.4_05] javax.persistence.PersistenceException
Type tutorial.model.Point is not found (error 301)
at com.objectdb.jpa.EMImpl.persist(EMImpl.java:437)
at objectdb.tutorial.main.Main.main(Main.java:25)
Caused by: com.objectdb.o.TEX: Type tutorial.model.Point is not found
at com.objectdb.o.MSG.e(MSG.java:107)
at com.objectdb.o.TYM.ay(TYM.java:1017)
at com.objectdb.o.TYM.ap(TYM.java:807)
at com.objectdb.o.TYM.ao(TYM.java:757)
at com.objectdb.o.TYM.at(TYM.java:873)
at com.objectdb.o.TYM.aw(TYM.java:945)
at com.objectdb.o.OBM.bB(OBM.java:371)
at com.objectdb.o.OBM.bB(OBM.java:257)
at com.objectdb.jpa.EMImpl.persist(EMImpl.java:434)
... 1 more
Caused by: java.lang.ClassNotFoundException: tutorial.model.Point
at com.objectdb.o.TYM.findClass(TYM.java:1033)
at com.objectdb.o.ACL.loadClass(ACL.java:131)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.objectdb.o.TYM.ay(TYM.java:1013)
... 8 more`
我看了这篇文章(),但由于某种原因,我的EntityManager实例没有成员函数getMetamodel()。因此,我尝试创建我自己的持久化单元,下面我用我的代码创建了它。在第一个for循环中,我仍然收到在em.persist(p)上似乎发生的运行时错误

package objectdb.tutorial.main;

import javax.persistence.*;

import objectdb.tutorial.model.Point;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // Open a database connection
        // (create a new database if it doesn't exist yet):
        EntityManagerFactory emf =
            Persistence.createEntityManagerFactory("my-pu");
        EntityManager em = emf.createEntityManager();


        // Store 1000 Point objects in the database:
        em.getTransaction().begin();
        for (int i = 0; i < 1000; i++) {
            Point p = new Point(i, i);
            em.persist(p);
        }
        em.getTransaction().commit();

        // Find the number of Point objects in the database:
        Query q1 = em.createQuery("SELECT COUNT(p) FROM Point p");
        System.out.println("Total Points: " + q1.getSingleResult());

        // Find the average X value:
        Query q2 = em.createQuery("SELECT AVG(p.x) FROM Point p");
        System.out.println("Average X: " + q2.getSingleResult());

        // Retrieve all the Point objects from the database:
        Query query =
            em.createQuery("SELECT p FROM Point p");
        List<Point> results = query.getResultList();
        for (Point p : results) {
            System.out.println(p);
        }

        // Close the database connection:
        em.close();
        emf.close();
    }
}
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="my-pu">
     <description>My Persistence Unit</description>
     <provider>com.objectdb.jpa.Provider</provider>
     <!-- <mapping-file>META-INF/mappingFile.xml</mapping-file> Not sure what this is-->
     <class>objectdb.tutorial.model.Point</class>
     <properties>
       <property name="javax.persistence.jdbc.url"
                 value="objectdb://localhost/tutorial.odb"/> 
       <property name="javax.persistence.jdbc.user" value="admin"/>
       <property name="javax.persistence.jdbc.password" value="admin"/>

     </properties>
   </persistence-unit>

</persistence>

我的持久性单位
com.objectdb.jpa.Provider
objectdb.tutorial.model.Point
谢谢你的建议。谢谢。

错误消息:“找不到类型tutorial.model.Point”指定包tutorial.model中的点类。您的包名为objectdb.tutorial.model。可能您以前有过该包的名称,但是您将包移动到了一个新的位置和名称

尝试删除数据库文件,因为它仍然以以前的名称包含该类(或者,如果需要数据,请按照ObjectDB网站上的说明进行操作)


如果没有getMetamodel方法,那么ObjectDB之前的类路径中可能有一个旧的JPA1.0JAR(包括JPA2.1JAR)。您必须修复类路径以避免其他问题。

您完全正确。我的系统库中有一个旧版本的JPA。
<?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="my-pu">
     <description>My Persistence Unit</description>
     <provider>com.objectdb.jpa.Provider</provider>
     <!-- <mapping-file>META-INF/mappingFile.xml</mapping-file> Not sure what this is-->
     <class>objectdb.tutorial.model.Point</class>
     <properties>
       <property name="javax.persistence.jdbc.url"
                 value="objectdb://localhost/tutorial.odb"/> 
       <property name="javax.persistence.jdbc.user" value="admin"/>
       <property name="javax.persistence.jdbc.password" value="admin"/>

     </properties>
   </persistence-unit>

</persistence>