首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

hibernate报错:an assertion failure occured (this may indicate a bug in Hibernate,该

2012-12-28 
hibernate报错:an assertion failure occured (this may indicate a bug in Hibernate实在是对这个错误没

hibernate报错:an assertion failure occured (this may indicate a bug in Hibernate
实在是对这个错误没辙了,网上也查了资料但是和我的情况也不符合,各位帮帮忙哈!
先贴错误

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.查询的时候就不要开事务了。
2.session.createQuery(hql).uniqueResult()).intValue();你用uniqueResult()方法,首先确保结果只有一个,否则会出现错误。
[其他解释]
http://blog.csdn.net/tianlincao/article/details/6040228
[其他解释]
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 ;
}

}


[其他解释]
大神帮我看看吧,这个问题我已解决不了,并没用到flush方法,并且我的impl每个方法里对对象只有一次增删改查而已,看到网上很多介绍都是一个对象save了,改了id了,update了,再save。。。我压根就没这么做也报这个错误呢?
[其他解释]
顶起来啊!!
[其他解释]
真是不知道错误又怎么没了,还是很感谢二位。。并且原来查询不用开事务啊,感谢!
[其他解释]
谢谢。虽然根本看不懂 !! 

热点排行