我有示例Web应用程序Hibernate 4.3.5 + Derby数据库10.10.1.1+具有IDE NetBeans 8.0Beta的Glassfish4.0。
我有下一个例外:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: CUSTOMERV is not mapped at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189) at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109) at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95) at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:331) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3633) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3522) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206) ... 72 more
来自index.xhtml的表格
<h:panelGrid id="panel1" columns="2" border="1" cellpadding="5" cellspacing="1"> <f:facet name="header"> <h:outputText value="Add Customer Information"/> </f:facet> <h:outputLabel value="First Name:"/> <h:inputText value="#{customer.firstName}" id="fn"/> <h:outputLabel value="Last Name:"/> <h:inputText value="#{customer.lastName}" id="ln"/> <h:outputLabel value="Email:"/> <h:inputText value="#{customer.email}" id="eml"/> <h:outputLabel value="Date of Birth:"/> <h:inputText value="#{customer.sd}" id="s"/> <f:facet name="footer"> <h:outputLabel value="#{customer.msg}" id="msg" styleClass="msg"/> <h:commandButton value="Save" action="#{customer.saveCustomer}"> </h:commandButton> </f:facet> </h:panelGrid>
客户.java
package com.javaknowledge.entity; import com.javaknowledge.dao.CustomerDao; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.persistence.*; @ManagedBean @SessionScoped public class Customer implements java.io.Serializable { private Integer custId; private String firstName; private String lastName; private String email; private Date dob; private String sd, msg, selectedname; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public Customer() { } public Customer(String firstName, String lastName, String email, Date dob) { this.firstName = firstName; this.lastName = lastName; this.email = email; this.dob = dob; } public String getSd() { return sd; } public void setSd(String sd) { this.sd = sd; } public Integer getCustId() { return this.custId; } public void setCustId(Integer custId) { this.custId = custId; } public String getFirstName() { return this.firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return this.lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Column(name = "EMAIL") public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } @Column(name = "DOB") public Date getDob() { return this.dob; } public void setDob(Date dob) { this.dob = dob; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getSelectedname() { return selectedname; } public void setSelectedname(String selectedname) { this.selectedname = selectedname; } public void saveCustomer() { try { Date d = sdf.parse(sd); System.out.println(d); this.dob = d; } catch (ParseException e) { e.printStackTrace(); } CustomerDao dao = new CustomerDao(); dao.addCustomer(this); this.msg = "Member Info Saved Successfull!"; clearAll(); } public void updateCustomer() { try { Date d = sdf.parse(sd); System.out.println(d); this.dob = d; } catch (ParseException e) { e.printStackTrace(); } CustomerDao dao = new CustomerDao(); dao.updateCustomer(this); this.msg = "Member Info Update Successfull!"; clearAll(); } public void deleteCustomer() { CustomerDao dao = new CustomerDao(); dao.deleteCustomer(custId); this.msg = "Member Info Delete Successfull!"; clearAll(); } public List<Customer> getAllCustomers() { List<Customer> users = new ArrayList<Customer>(); CustomerDao dao = new CustomerDao(); users = dao.getAllCustomers(); return users; } public void fullInfo() { CustomerDao dao = new CustomerDao(); List<Customer> lc = dao.getCustomerById(selectedname); System.out.println(lc.get(0).firstName); this.custId = lc.get(0).custId; this.firstName = lc.get(0).firstName; this.lastName = lc.get(0).lastName; this.email = lc.get(0).email; this.dob = lc.get(0).dob; this.sd = sdf.format(dob); } private void clearAll() { this.firstName = ""; this.lastName = ""; this.sd = ""; this.email = ""; this.custId=0; } }
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property> <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</property> <property name="hibernate.connection.url">jdbc:derby://localhost:1527/derbyDB</property> <property name="hibernate.connection.username">user1</property> <property name="hibernate.connection.password">user1</property> <property name="hibernate.hbm2ddl.auto">create</property> <property name="c3p0.min_size">1</property> <property name="c3p0.max_size">5</property> <property name="c3p0.timeout">300</property> <property name="c3p0.max_statements">50</property> <property name="c3p0.idle_test_period">300</property> <mapping class="com.javaknowledge.entity.Customer" resource="com/javaknowledge/entity/Customer.hbm.xml"/> </session-factory> </hibernate-configuration>
Customer.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.javaknowledge.entity.Customer" table="CUSTOMERV" schema="APP"> <id name="custId" type="java.lang.Integer"> <column name="cust_id" /> <generator class="increment" /> </id> <property name="firstName" type="string"> <column name="first_name" length="45" not-null="true" /> </property> <property name="lastName" type="string"> <column name="last_name" length="45" not-null="true" /> </property> <property name="email" type="string"> <column name="email" length="45" not-null="true" /> </property> <property name="dob" type="date"> <column name="dob" length="10" not-null="true" /> </property> </class> </hibernate-mapping>
最后我发现了一个错误!希望这对某人有用。对数据库(在我的情况下为Apache Derby)进行请求时,基本名称需要将首字母大写,小写。
这是错误的查询:
session.createQuery("select first_name from CUSTOMERV").
这是有效的查询
session.createQuery("select first_name from Customerv").
并且类实体必须与数据库同名,但是我不确定。