2017-08-21 83 views
0

我,在Hibernate和Tomcat 8.Hibernate映射问题Tomcat8

当我部署应用程序(通过经理/ HTML或创建一个新的文件夹,并把整个项目)没有问题,但映射问题如果我尝试把阶级到另一个现有应用程序的WEB-INF并运行它,日志说:

org.hibernate.hql.internal.ast.QuerySyntaxException: Telefonos is not mapped [FROM Telefonos where canal = :canal and (fechaTomado is null or (fechaTomado + 90) >= getdate())] 
at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96) 
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) 
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126) 
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88) 
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190) 
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) 
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) 
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1796) 
at operaciones.telefonoscvts.ManejadorTelefonos.listTelefonos(ManejadorTelefonos.java:133) 
at org.apache.jsp.comercial.comercial.ajax.traeNumero_jsp._jspService(traeNumero_jsp.java:123) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Unknown Source) 
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Telefonos is not mapped 

Teléfonos实体

package operaciones.telefonoscvts.dao; 

import java.io.Serializable; 
import javax.persistence.*; 

@Entity 
@Table(name = "telefonos_cvts") 
public class Telefonos implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "id") 
private int id; 

@Column(name = "telefono") 
private String telefono; 

@Column(name = "modalidad") 
private String modalidad; 

@Column(name = "canal") 
private String canal; 

@Column(name = "fechaCarga") 
private String fechaCarga; 

@Column(name = "fechaTomado") 
private String fechaTomado; 

public Telefonos() { 
} 

//get and set methods 

我试过很多方法使它工作,包都很好,它读取hibernate.cfg.xml,我不知道为什么它的应用程序正在失去它的映射。安妮的帮助表示赞赏。

休眠:4.3

谢谢!!

+2

向我们展示Telefonos实体的映射 –

+0

@NikolasCharalambidis,已更新! – Zttan

+0

*但如果我尝试将这些类放入另一个现有应用程序的WEB-INF中并运行它*,但是您如何完全做到这一点?向我们展示项目层次结构。 –

回答

0

我看到你的映射是正确的。最有可能的解决方案是检查你是否已经包括休眠实体配置:

@Bean 
public LocalSessionFactoryBean sessionFactory() { 
    LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean(); 
    lsfb.setDataSource(this.dataSource()); 
    lsfb.setPackagesToScan(new String[] { 
     "operaciones.telefonoscvts.dao" 
    }); 
    lsfb.setHibernateProperties(this.hibernateProperties()); 
    return sessionFactory; 
} 

可以实现使用基于XML的配置相同的效果。不过,在这种情况下,我发现注释更好。

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" > 
    <property name="dataSource" ref="dataSource"/> 
    <property name="packagesToScan"> 
     <list> 
      <value>operaciones.telefonoscvts.dao</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql:false}</prop> 
      <prop key="hibernate.format_sql">${hibernate.format_sql:false}</prop> 
     </props> 
    </property>  
</bean> 

来源:Websystique

此外,我建议你多文件Telefonos.java到包operaciones.telefonoscvts.entity(或model)分开负责与数据库通信的类。