JPA映射: "QuerySyntaxException: foobar没有映射..."

17 浏览
0 Comments

JPA映射: "QuerySyntaxException: foobar没有映射..."

我一直在尝试一个非常简单的JPA示例,并试图将其调整到现有的数据库中。但是我无法解决这个错误。(如下所示。)一定是我没有注意到的一些简单的东西。

在下面的DocumentManager类中(一个简单的servlet,那是我的目标目标)有两个功能:

  1. 插入一行
  2. 返回所有行

插入操作完美运行 - 一切都很好。问题在于检索。我尝试了各种不同的Query q = entityManager.createQuery参数的值,但没有运气,我也尝试了各种更明确的类注释(如列类型),但都没有成功。

请救救我。我确信这是一个小问题。由于我对JPA的不熟悉,我无法再继续下去了。

我的./src/ch/geekomatic/jpa/FooBar.java文件:

@Entity
@Table( name = "foobar" )
public class FooBar {
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="id")
    private int id;
    @Column(name="rcpt_who")
    private String rcpt_who;
    @Column(name="rcpt_what")
    private String rcpt_what;
    @Column(name="rcpt_where")
    private String rcpt_where;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getRcpt_who() {
        return rcpt_who;
    }
    public void setRcpt_who(String rcpt_who) {
        this.rcpt_who = rcpt_who;
    }
    //snip...the other getters/setters are here
}

我的./src/ch/geekomatic/jpa/DocumentManager.java类:

public class DocumentManager extends HttpServlet {
    private EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory( "ch.geekomatic.jpa" );
    protected void tearDown() throws Exception {
        entityManagerFactory.close();
    }
   @Override
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
       FooBar document = new FooBar();
       document.setRcpt_what("my what");
       document.setRcpt_who("my who");
       persist(document);
       retrieveAll(response);
   }
   public void persist(FooBar document) {
       EntityManager entityManager = entityManagerFactory.createEntityManager();
       entityManager.getTransaction().begin();
       entityManager.persist( document );
       entityManager.getTransaction().commit();
       entityManager.close();
   }
    public void retrieveAll(HttpServletResponse response) throws IOException {
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        entityManager.getTransaction().begin();
        //  *** PROBLEM LINE ***
        Query q = entityManager.createQuery( "SELECT r FROM foobar r", FooBar.class );
        List result = q.getResultList();
        for ( FooBar doc : result ) {
            response.getOutputStream().write(event.toString().getBytes());
            System.out.println( "Document " + doc.getId()  );
        }
        entityManager.getTransaction().commit();
        entityManager.close();
    }
}

{tomcat-home}/webapps/ROOT/WEB-INF/classes/METE-INF/persistance.xml文件:



    test stuff for dc
    ch.geekomatic.jpa.FooBar
    
        
        
        
        
        
        
    


MySQL表描述:

mysql> describe foobar;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| rcpt_what  | varchar(255) | YES  |     | NULL    |                |
| rcpt_where | varchar(255) | YES  |     | NULL    |                |
| rcpt_who   | varchar(255) | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

0