我要做一个多表查询,把查询结果用一个实体类接收,每个表都建对应实体类太麻烦。
接收的类是PlaneR,问题发生在Dao层:Dao层使用了工具类HibernateUtil
package jy.utils;import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;/**
 * 该工具类提供了一个属性:SessionFactory sessionFactory , 并将创建sessionFactory写在了static代码块里,
 * 这样其他程序就可以直接通过HibernateUtil.sessionFactory引用,而不是再通过一系列的代码创建SessionFactory对象。
 * 
 * 另外工具类还提供了二个方法:
 * 1:通过线程创建Session-->currentSession()
 * 工具类中通过ThreadLocal创建Session ,可以隔离多个线程的数据共享
 * 
 * 2:关闭Session-->closeSession()
 * 可以看出工具类将创建SessionFactory对象、Session对象以及关闭Session放在了不同的代码块以及方法里,
 * 这样以后咱们需要创建什么或者关闭什么直接通过HibernateUtil.XXX实现即可,大大缩减了代码量,提高代码复用性。
 * 
 * @author Gelbert
 * 
 */
public class HibernateUtil { public static final SessionFactory sf; // 1.Build sessionfactory
static {
try {
/*
 * 配置文件创建Configuration实例
 * 使用默认配置文件创建Configuration实例时不需要给configure()加参数。
 */
Configuration cfg = new Configuration().configure("hibernateRead.cfg.xml");
ServiceRegistry sr = new ServiceRegistryBuilder()
.applySettings(cfg.getProperties()).buildServiceRegistry(); sf = cfg.buildSessionFactory(sr);
} catch (HibernateException e) {
System.err.println("Initial SessionFactory creation failed." + e);
throw new ExceptionInInitializerError(e);
}
} /**
 * 2.ThreadLocal
 * 
 * 可以隔离多个线程的数据共享,因此不需要对线程进行同步
 */
public static final ThreadLocal<Session> session = new ThreadLocal<Session>(); // 3.Create Session
public static Session currentSession() throws HibernateException {
// 通过线程对象.get()方法安全创建Session
Session s = session.get();
// 如果该线程还没有Session,则创建一个新的Session
if (s == null) {
s = sf.openSession();
// 将获得的Session变量存储在ThreadLocal变量session里
session.set(s);
}
return s;
} // 4.Close session
public static void closeSession() throws HibernateException {
Session s = session.get();
if (s != null) {
s.close();
}
session.set(s);
}}
报错日志:
Struts Problem ReportStruts has detected an unhandled exception:Messages:
Unknown entity: jy.entity.PlaneR
File: org/hibernate/internal/SessionFactoryImpl.java
Line number: 1,129
Stacktracesorg.hibernate.MappingException: Unknown entity: jy.entity.PlaneR
    org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1129)    org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.getSQLLoadable(SQLQueryReturnProcessor.java:336)    org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.processRootReturn(SQLQueryReturnProcessor.java:377)    org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.processReturn(SQLQueryReturnProcessor.java:356)    org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.process(SQLQueryReturnProcessor.java:172)    org.hibernate.loader.custom.sql.SQLCustomQuery.(SQLCustomQuery.java:87)    org.hibernate.engine.query.spi.NativeSQLQueryPlan.(NativeSQLQueryPlan.java:67)    org.hibernate.engine.query.spi.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:197)    org.hibernate.internal.AbstractSessionImpl.getNativeSQLQueryPlan(AbstractSessionImpl.java:225)    org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:231)    org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:157)    jy.dao.PlaneRDao.getPageResult(PlaneRDao.java:70)    jy.service.PlaneRService.getPageResult(PlaneRService.java:55)    jy.action.PlaneAction.grid(PlaneAction.java:39)    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    java.lang.reflect.Method.invoke(Method.java:606)    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453)    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255)    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236)    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236)    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:511)    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)    org.apache.coyote.http11.AbstractHttp11Processor.proce
.....  struts.devMode=false
in your WEB-INF/classes/struts.properties file.该怎么改呢?