: "QuerySyntaxException filanca ... eşlenmedi". Ama bu hatayı geçemem. (Aşağıda.) Sadece göremediğim basit bir şey olmalı. Aşağıda DocumentManager sınıfta JPA haritalama: Ben çok basit bir JPA örnekle etrafında oynuyorsun ve varolan veritabanına çimdik çalışıyorum
org.hibernate.hql.internal.ast.QuerySyntaxException: FooBar is not mapped [SELECT r FROM FooBar r]
org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93)
(basit servlet, bu benim hedef hedeftir gibi) iki şey yapar:
- dönüş bir satır eklemek tüm satırları
Ekleme mükemmel çalışır - hepsi orada iyi. Sorun geri alma ile. Query q = entityManager.createQuery
parametresi için her türlü değeri denedim, ancak şans yok, ve sınıfın (sütun türleri gibi) çok daha fazla açıklamalı açıklamalarını başarıya ulaşmadan denedim.
kendimden kaydedin. Eminim küçük bir şey. JPA ile olan deneyimsizliğim, daha uzaklara gitmeme engel oluyor.
Benim ./src/ch/geekomatic/jpa/FooBar.java dosyası:
@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
}
Benim ./src/ch/geekomatic/jpa/DocumentManager.java sınıf
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<FooBar> 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-ev}
dosya /webapps/ROOT/WEB-INF/classes/METE-INF/persistance.xml 210<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_2_0.xsd"
version="2.0">
<persistence-unit name="ch.geekomatic.jpa">
<description>test stuff for dc</description>
<class>ch.geekomatic.jpa.FooBar</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://svr:3306/test" />
<property name="javax.persistence.jdbc.user" value="wafflesAreYummie" />
<property name="javax.persistence.jdbc.password" value="poniesRock" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
</persistence>
MySQL tablo tanımı:
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)
Yani, sınıf adına ve tablo adına değil mi? –
Evet.SQL'e benziyor olsa da, JPA Sorgu Dilini yürütür; Böylece, Tablolardan değil, Varlıklardan seçiyorsunuz. – Chris
*** Benim kahramanım Aralık 2011 için. *** Teşekkürler. Bu konuda bir saatten fazla uçtum ... –