2013-05-07 70 views
0

我试图使用称为ObjectDB的JPA实现。 我已经下载了ObjectDB的jar文件,并将它们包含在我的Eclipse项目中。这是两个阶级:JPA ObjectDB:编译并使用它

package tutorial; 

import java.io.Serializable; 
import javax.persistence.*; 

@Entity 
public class Point implements Serializable { 
private static final long serialVersionUID = 1L; 

@Id @GeneratedValue 
private long id; 

private int x; 
private int y; 

public Point() { 
} 

Point(int x, int y) { 
    this.x = x; 
    this.y = y; 
} 

public Long getId() { 
    return id; 
} 

public int getX() { 
     return x; 
} 

public int getY() { 
    return y; 
} 

@Override 
public String toString() { 
    return String.format("(%d, %d)", this.x, this.y); 
} 
} 

,这是公司主营:

package tutorial; 

import javax.persistence.*; 
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("$objectdb/db/points.odb"); 
    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: 
    TypedQuery<Point> query = 
     em.createQuery("SELECT p FROM Point p", Point.class); 
    List<Point> results = query.getResultList(); 
    for (Point p : results) { 
     System.out.println(p); 
    } 

    // Close the database connection: 
    em.close(); 
    emf.close(); 
} 
} 

这个小程序只有这样做,从Eclipse的工作原理: 运行方式 - > Java应用程序

如果我尝试编译它,我得到:

error: cannot find symbol 
EntityManagerFactory emf = 
symbol: class EntityManagerFactory 
location: class Main 

等等所有其他类。 这很奇怪,因为我已将External Jar包含到我的项目中,包含ObjectDb的可执行文件的jar文件... 我可以解决这个问题吗?

回答

1

您需要将JPA库文件添加到类路径中。

+0

ehm ...它应该怎么做?谢谢 – user1576208 2013-05-07 11:40:41

+0

从http://sourceforge.net/projects/hibernate/files/hibernate4/4.2.1.Final/hibernate-release-4.2.1.Final.zip/download下载hibernate orm librarys(hibernate是一个jpa提供者)然后将jar添加到日食中。 – 2013-05-07 11:53:01

+0

我已经将jar添加到Eclipse,但问题是我无法从shell(javac Main.java)编译,因为它说java.persistence不存在......但是我已经从eclipse添加了 – user1576208 2013-05-07 11:55:06

2

如上所述,您需要设置类路径。

在类路径中,您可以添加除ObjectDB数据库实现外还包含所有必需的JPA类型(例如EntityManagerFactory)的objectdb.jar。

因此,在Windows的命令行可能是:

> javac -classpath .;c:\objectdb\bin\objectdb.jar tutorial\*.java 

在当前目录是教程包目录的父目录。

相关问题