实在是对这个错误没辙了,网上也查了资料但是和我的情况也不符合,各位帮帮忙哈!
先贴错误
11:17:22,796 ERROR org.hibernate.AssertionFailure:45 - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: null id in com.sykjw.entity.Goods entry (don't flush the Session after an exception occurs)
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:78)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:187)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:143)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)
at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:997)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1142)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at com.sykjw.dao.impl.CategoryDAOImpl.findByName(CategoryDAOImpl.java:123)
at com.sykjw.service.CategoryService.findByName(CategoryService.java:64)
at com.sykjw.action.CategoryAction.findKfcAndBskCategory(CategoryAction.java:86)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.sykjw.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:26)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Unknown Source)

解决方案 »

  1.   

    impl文件
    package com.sykjw.dao.impl;import java.util.List;import org.hibernate.Query;
    import org.hibernate.Session;import com.sykjw.dao.GoodsDAO;
    import com.sykjw.entity.Category;
    import com.sykjw.entity.Goods;
    import com.sykjw.entity.User;
    import com.sykjw.entity.UserType;
    import com.sykjw.util.HibernateUtil;public class GoodsDAOImpl implements GoodsDAO{ private static GoodsDAO goodsDAO ;
    //getInstance
    public static GoodsDAO getInstance() {
    if (goodsDAO == null) {
    goodsDAO = new GoodsDAOImpl() ;
    }
    return goodsDAO ;
    }

    //ok
    public boolean doCreate(Goods goods) throws Exception {
    // TODO Auto-generated method stub
    boolean b = false ;
    Session session= null ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    session.save(goods) ;
    session.getTransaction().commit() ;
    b = true ;
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace() ;
    return b ;
    }
    return b;
    } //ok
    public boolean doDelete(Goods goods) throws Exception {
    // TODO Auto-generated method stub
    boolean b = false ;
    Session session= null ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    session.delete(goods) ;
    session.getTransaction().commit() ;
    b = true ;
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace() ;
    return b ;
    }
    return b;
    } //ok
    public boolean doUpdate(Goods goods) throws Exception {
    // TODO Auto-generated method stub
    boolean b = false ;
    Session session= null ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    session.update(goods) ;
    session.getTransaction().commit() ;
    b = true ;
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace() ;
    return b ;
    }
    return b;
    } //ok
    public List<Goods> findAll() throws Exception {
    // TODO Auto-generated method stub
    Session session = null ;
    List<Goods> goodsList = null ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    String hql = "from Goods" ;
    Query q = session.createQuery(hql) ;
    goodsList = q.list() ;
    session.getTransaction().commit() ;

    } catch (Exception e) {
    // TODO: handle exception
    }
    return goodsList ;
    } //ok
    public Goods findById(int id) throws Exception {
    // TODO Auto-generated method stub
    Goods goods = null ;
    Session session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    goods = (Goods)session.get(Goods.class, id) ;
    session.getTransaction().commit() ;
    return goods;
    }

    //ok
    public Goods findByName(String name) throws Exception {
    // TODO Auto-generated method stub
    List<Goods> goodsList= null ;
    Goods goods = null ;
    Session session = null ;
    String hql = "from Goods g  where g.name = ?" ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    Query q = session.createQuery(hql) ;
    q.setParameter(0, name) ;
    goodsList = q.list() ;
    session.getTransaction().commit() ;
    if ((goodsList != null) && (goodsList.size()!= 0)) {
    goods = goodsList.get(0) ;
    }
    } catch (Exception e) {
    // TODO: handle exception
    }
    return goods;
    } //ok
    public List<Goods> findByType(int typeId) throws Exception {
    // TODO Auto-generated method stub
    List<Goods> goodsList= null ;
    Category category = new Category() ;
    category.setId(typeId) ;
    Session session = null ;
    String hql = "from Goods g  where g.category = ?" ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    Query q = session.createQuery(hql) ;
    q.setParameter(0, category) ;
    goodsList = q.list() ;
    session.getTransaction().commit() ;
    } catch (Exception e) {
    // TODO: handle exception
    }
    return goodsList;
    }
    //ok
    //得到非缺货的商品
    public List<Goods> findNormalGoodsByTypeId(int typeId) throws Exception {
    List<Goods> goodsList= null ;
    Category category = new Category() ;
    category.setId(typeId) ;
    Session session = null ;
    String hql = "from Goods g  where g.category = ? and g.isShort = '0'" ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    Query q = session.createQuery(hql) ;
    q.setParameter(0, category) ;
    goodsList = q.list() ;
    session.getTransaction().commit() ;
    } catch (Exception e) {
    // TODO: handle exception
    }
    return goodsList;
    } //ok
    //得到特价商品
    public List<Goods> findPromotionGoods() throws Exception {
    // TODO Auto-generated method stub
    List<Goods> goodsList= null ;
    Session session = null ;
    String hql = "from Goods g  where g.isSale = '1' and g.category.name != '订座'" ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    Query q = session.createQuery(hql) ;
    goodsList = q.list() ;
    session.getTransaction().commit() ;
    } catch (Exception e) {
    // TODO: handle exception
    }
    return goodsList;
    } //ok
    //得到缺货商品
    public List<Goods> findShortGoods() throws Exception {
    // TODO Auto-generated method stub
    List<Goods> goodsList= null ;
    Session session = null ;
    String hql = "from Goods g  where g.isShort = '1'" ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    Query q = session.createQuery(hql) ;
    goodsList = q.list() ;
    session.getTransaction().commit() ;
    } catch (Exception e) {
    // TODO: handle exception
    }
    return goodsList;
    } //ok
    public List<Goods> findAllByRange(int fromRow, int toRow) throws Exception {
    // TODO Auto-generated method stub
    return null;
    } public List<Goods> findByHQL(String hql) throws Exception {
    // TODO Auto-generated method stub
    return null;
    } //ok
    public boolean doDeleteById(int id) throws Exception {
    // TODO Auto-generated method stub
    Session session = null ;
    boolean b = false ;
    String hql = "delete Goods g where g.id = ?" ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    Query q = session.createQuery(hql) ;
    q.setParameter(0, id) ;
    int i = q.executeUpdate() ;
    session.getTransaction().commit() ;
    if (i >= 1) {
    b = true ;
    }
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace() ;
    return b ;
    }
    return b;
    }
    public List<Goods> findByDesc(String desc) throws Exception {
    // TODO Auto-generated method stub
    List<Goods> goodsList= null ;
    Session session = null ;
    String hql = "from Goods g  where g.desc = ?" ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    Query q = session.createQuery(hql) ;
    q.setParameter(0, desc) ;
    goodsList = q.list() ;
    session.getTransaction().commit() ;
    } catch (Exception e) {
    // TODO: handle exception
    }
    return goodsList;
    }

    public boolean doUpdateNameByDesc(String name , String desc) throws Exception {
    // TODO Auto-generated method stub
    Session session = null ;
    boolean b = false ;
    String hql = "update Goods g set g.name = ? where g.desc = ?" ;
    try {
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    Query q = session.createQuery(hql) ;
    q.setParameter(0, name) ;
    q.setParameter(1, desc) ;
    int i = q.executeUpdate() ;
    session.getTransaction().commit() ;
    if (i >= 1) {
    b = true ;
    }
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace() ;
    return b ;
    }
    return b;
    } public int getCount(int i , int cid ) {
    // TODO Auto-generated method stub
    String hql = "select count(*) from Goods" ;

    //0不变,1查cid,2查特价商品
    if (i == 1 ) {
    hql += " g where g.category.id =" + cid ;
    }else if (i == 2) {
    hql += " g where g.isSale = '1'" ;
    }
    Session session = null ;
    session = HibernateUtil.getCurrentSession() ;
    session.beginTransaction() ;
    System.out.println("begin print goodsDAOImpl Count");
    int count = ((Long)session.createQuery(hql).uniqueResult()).intValue();
    session.getTransaction().commit() ;
    return count ;
    }

    }
      

  2.   

    大神帮我看看吧,这个问题我已解决不了,并没用到flush方法,并且我的impl每个方法里对对象只有一次增删改查而已,看到网上很多介绍都是一个对象save了,改了id了,update了,再save我压根就没这么做也报这个错误呢?
      

  3.   

    1.查询的时候就不要开事务了。
    2.session.createQuery(hql).uniqueResult()).intValue();你用uniqueResult()方法,首先确保结果只有一个,否则会出现错误。
      

  4.   

    http://blog.csdn.net/tianlincao/article/details/6040228