2013-12-16 177 views
0

我收到未知實體的例外是我沒有使用彈簧,並且不希望使用堆棧跟蹤休眠未知的實體除外

org.hibernate.MappingException: Unknown entity: com.riteshsangwan.ossoc.entities.Users 
    at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1145) 
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1358) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:116) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206) 
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191) 
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:683) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:675) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:671) 
    at com.riteshsangwan.ossoc.business.UsersDAOImpl.addUser(UsersDAOImpl.java:28) 
    at com.riteshsangwan.ossoc.actions.RegisterAction.execute(RegisterAction.java:93) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252) 
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) 
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563) 
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilt 
INFO: er(DefaultFilterChain.java:288) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
    at java.lang.Thread.run(Thread.java:724) 

。 這是用戶級

package com.riteshsangwan.ossoc.entities; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Date; 
import javax.persistence.Cacheable; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 
import org.hibernate.annotations.Cache; 
import org.hibernate.annotations.CacheConcurrencyStrategy; 


/** 
* 
* @author sabertooth 
*/ 
@Entity 
@Cacheable 
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE) 
@org.hibernate.annotations.SelectBeforeUpdate 
public class Users implements Serializable{ 

    @Id @GeneratedValue 
    private long uid; 


    private String firstName; 
    private String lastName; 
    private String email; 
    private String password; 

    @Column(length = 512) 
    private String activation; 

    @Temporal(TemporalType.TIMESTAMP) 
    private Date joined; 

    public Date getJoined() { 
     return joined; 
    } 

    public void setJoined() { 
     joined = new Date(); 
    } 

    @OneToMany(mappedBy="user") 

    private Collection<Files> files=new ArrayList<Files>(); 

    public long getUid() { 
     return uid; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lasttName) { 
     this.lastName = lasttName; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getActivation() { 
     return activation; 
    } 

    public void setActivation(String activation) { 
     this.activation = activation; 
    } 

    public Collection<Files> getFiles() { 
     return files; 
    } 

    public void setFiles(Collection<Files> files) { 
     this.files = files; 
    } 

} 

這是hibernate.cfg.xml中

<hibernate-configuration> 
    <session-factory> 
    <!-- Database connection settings --> 
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="connection.url">jdbc:mysql://localhost:3306/ossoc</property> 
    <property name="connection.username">root</property> 
    <property name="connection.password">deflection</property> 
    <!-- JDBC connection pool (use the built-in) --> 
    <property name="connection.pool_size">1</property> 
    <!-- SQL dialect --> 
    <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 
    <!-- second-level cache --> 
    <property name="hibernate.cache.use_second_level_cache">true</property> 
    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> 
    <property name="hibernate.cache.use_query_cache">true</property> 
    <property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property> 
    <!-- Echo all executed SQL to stdout --> 
    <!-- <property name="show_sql">true</property> --> 
    <!-- Drop and re-create the database schema on startup --> 
    <property name="hbm2ddl.auto">update</property> 
    <!-- Names the annotated entity class --> 
    <mapping class="com.riteshsangwan.ossoc.entities.Users" file="" jar="" package="" resource=""/> 
    <mapping class="com.riteshsangwan.ossoc.entities.Files"/> 
    </session-factory> 
</hibernate-configuration> 

我使用import javax.persistence.Entity;以及在hibernate.cfg.xml文件映射我的實體類,那麼爲什麼我會收到此異常。

我正在使用ServletContextListener獲得下面的會話工廠是代碼 任何幫助將不勝感激。長期困擾這個問題。

package com.riteshsangwan.ossoc.interceptors; 

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 
import org.hibernate.HibernateException; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.service.ServiceRegistryBuilder; 


public class HibernateListener implements ServletContextListener{ 
    private Configuration config; 
    private SessionFactory sf; 
    private static Class clazz = HibernateListener.class; 

    public static final String KEY_NAME = clazz.getName(); 

    @Override 
    public void contextDestroyed(ServletContextEvent event) { 
    if(sf!=null) 
     { 
      sf.close(); 
     } 
    } 

    @Override 
    public void contextInitialized(ServletContextEvent event) { 

     try 
     { 
      config = new Configuration(); 

      config.configure(); 
      ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();   
      sf = config.buildSessionFactory(sr); 
      event.getServletContext().setAttribute(KEY_NAME, sf); 
     } 
     catch (HibernateException e) 
     { 

     } 
    } 
} 

編輯:類打開會話

package com.riteshsangwan.ossoc.util; 

import com.riteshsangwan.ossoc.interceptors.HibernateListener; 
import org.apache.struts2.ServletActionContext; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 

public class DataSource { 
    private SessionFactory sf; 

    private Session session; 



    public Session getSession(){ 
     if(session==null) 
     { 
      createSession(); 
     } 
     return session; 
    } 

    private void createSession(){ 
     sf = (SessionFactory) ServletActionContext.getServletContext() 
        .getAttribute(HibernateListener.KEY_NAME); 
     session=sf.openSession(); 
    } 

} 
+2

如果我是你,我會確保這一行是有效的。我不完全確定,但我一直在映射中看到表名。 – Ashish

+1

*「我不使用彈簧,不想使用。」*您對Struts2容器滿意嗎? –

+0

@RomanC我正在學習,我想在跳轉到spring前學習這些 – user3108790

回答

0

看起來像這樣的事情應該爲ya工作。

package com.riteshsangwan.ossoc.interceptors; 

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 
import org.hibernate.HibernateException; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.service.ServiceRegistryBuilder; 
import org.hibernate.cfg.AnnotationConfiguration; 


public class HibernateListener implements ServletContextListener{ 
    private AnnotationConfiguration config; 
    private SessionFactory sf; 
    private static Class clazz = HibernateListener.class; 

    public static final String KEY_NAME = clazz.getName(); 

    @Override 
    public void contextDestroyed(ServletContextEvent event) { 
    if(sf!=null) 
     { 
     sf.close(); 
     } 
    } 

    @Override 
    public void contextInitialized(ServletContextEvent event) { 

    try 
    { 
     config = new AnnotationConfiguration(); 
     config.addAnnotatedClass(Users.class); 
     ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();   
     sf = config.configure().buildSessionFactory(sr); 
     event.getServletContext().setAttribute(KEY_NAME, sf); 
    } 
    catch (HibernateException e) 
    { 

    } 
} 
} 
0
package Test; 

import java.util.EnumSet; 

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.boot.Metadata; 
import org.hibernate.boot.MetadataSources; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.tool.hbm2ddl.SchemaExport; 
import org.hibernate.tool.schema.TargetType; 
import org.junit.Test; 

import Entity.Users; 

public class TestMain { 
    public static void main(String[] arg){ 
     try { 
     ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build(); 
     SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory(); 
     Session session=sessionFactory.openSession(); 
     Transaction transaction=session.beginTransaction(); 
     Users users=new Users(); 
     users.setId(2); 
     session.save(users); 
     transaction.commit(); 
     session.close(); 
     sessionFactory.close(); 
     }catch(Throwable th){ 
       System.err.println("Init SessionFactory creation failed"); 
       System.err.println(th); 
       throw new ExceptionInInitializerError(th); 
     }finally { 

     } 
    } 


} 

我使用hibernate5.1,它`OK。

0

爲了解決休眠未知實體例外,您應檢查以下內容:

  1. 檢查進口權包:import javax.persistence.Entity;
  2. 檢查hibernate.cfg.xml
  3. mapping-classmapping-resource對於某些版本的hibernate,它可能無法以上述方式初始化SessionFactory。試試這個代碼:

    SessionFactory sf = new Configuration().configure().buildSessionFactory();

在上述情況下,第三條道路可正常工作。