JPA映射: "QuerySyntaxException: foobar没有映射..."
JPA映射: "QuerySyntaxException: foobar没有映射..."
我一直在尝试一个非常简单的JPA示例,并试图将其调整到现有的数据库中。但是我无法解决这个错误。(如下所示。)一定是我没有注意到的一些简单的东西。
在下面的DocumentManager类中(一个简单的servlet,那是我的目标目标)有两个功能:
- 插入一行
- 返回所有行
插入操作完美运行 - 一切都很好。问题在于检索。我尝试了各种不同的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 ); Listresult = 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)