先把代码贴出来吧! 逻辑操作类ServiceImpl.java
public boolean createKind(String kindName,String kindDesc) throws ServiceException
{
Session sess = null;
Transaction tr = null;
try
{
KindDaoInterf kdi = (KindDaoInterf)DaoFactory.instance().getDao("kindDao");
sess = HibernateSessionFactory.getSession();
tr = sess.beginTransaction();
if(kdi.get(sess, kindName)!=null) throw new ServiceException("该类别已经存在");
Kind kind = new Kind();
kind.setKindName(kindName);
kind.setKindDesc(kindDesc);
kdi.save(sess, kind);
tr.commit();
return true;
}
catch(Exception e)
{
tr.rollback();
throw new ServiceException(e.getMessage()+"0");
}
finally
{
HibernateSessionFactory.closeSession();
}
}
KindDaoImpl.java
package cn.alavu.dao;import org.hibernate.Session;import cn.alavu.dao.interf.KindDaoInterf;
import cn.alavu.model.Kind;public class KindDaoImpl implements KindDaoInterf {
public void save(Session sess,Kind kind)
{
sess.save(kind);
}
public void update(Session sess,Kind kind)
{
sess.update(kind);
}
public Kind get(Session sess,String kindName)
{
return (Kind)sess.load(Kind.class, kindName);
}
public void delete(Session sess,String kindName)
{
sess.delete(sess.get(Kind.class, kindName));
}
public void delete(Session sess,Kind kind)
{
sess.delete(kind);
}
} KindDaoInterf.java
package cn.alavu.dao.interf;import cn.alavu.dao.base.Dao;
import org.hibernate.*;import cn.alavu.model.Kind;
public interface KindDaoInterf extends Dao {
void save(Session sess,Kind kind);
void update(Session sess,Kind kind);
Kind get(Session sess,String kindName);
void delete(Session sess,String kindName);
void delete(Session sess,Kind kind);
}
出现问题:
javax.servlet.ServletException: 该类别已经存在
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
cn.alavu.util.EncodeServlet.process(EncodeServlet.java:13)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause cn.alavu.exception.ServiceException: 该类别已经存在
cn.alavu.service.ServiceImpl.createKind(ServiceImpl.java:73)
cn.alavu.action.KindAddAction.execute(KindAddAction.java:45)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
cn.alavu.util.EncodeServlet.process(EncodeServlet.java:13)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
问题就是当我添加类别时,说该类别已经存在,但是数据库里没有这个类别啊,今天上午都可以的,后来不知道动了哪里就不行了,非得把ServiceImpl.java中的if(kdi.get(sess, kindName)!=null) throw new ServiceException("该类别已经存在")这句干掉就可以了,从出现的问题来看kdi.get(sess, kindName)!=null返回的怎么是ture呢?不管你输入的是什么样的类别!搞了一个晚上了,请高手帮忙看下,谢谢!
public boolean createKind(String kindName,String kindDesc) throws ServiceException
{
Session sess = null;
Transaction tr = null;
try
{
KindDaoInterf kdi = (KindDaoInterf)DaoFactory.instance().getDao("kindDao");
sess = HibernateSessionFactory.getSession();
tr = sess.beginTransaction();
if(kdi.get(sess, kindName)!=null) throw new ServiceException("该类别已经存在");
Kind kind = new Kind();
kind.setKindName(kindName);
kind.setKindDesc(kindDesc);
kdi.save(sess, kind);
tr.commit();
return true;
}
catch(Exception e)
{
tr.rollback();
throw new ServiceException(e.getMessage()+"0");
}
finally
{
HibernateSessionFactory.closeSession();
}
}
KindDaoImpl.java
package cn.alavu.dao;import org.hibernate.Session;import cn.alavu.dao.interf.KindDaoInterf;
import cn.alavu.model.Kind;public class KindDaoImpl implements KindDaoInterf {
public void save(Session sess,Kind kind)
{
sess.save(kind);
}
public void update(Session sess,Kind kind)
{
sess.update(kind);
}
public Kind get(Session sess,String kindName)
{
return (Kind)sess.load(Kind.class, kindName);
}
public void delete(Session sess,String kindName)
{
sess.delete(sess.get(Kind.class, kindName));
}
public void delete(Session sess,Kind kind)
{
sess.delete(kind);
}
} KindDaoInterf.java
package cn.alavu.dao.interf;import cn.alavu.dao.base.Dao;
import org.hibernate.*;import cn.alavu.model.Kind;
public interface KindDaoInterf extends Dao {
void save(Session sess,Kind kind);
void update(Session sess,Kind kind);
Kind get(Session sess,String kindName);
void delete(Session sess,String kindName);
void delete(Session sess,Kind kind);
}
出现问题:
javax.servlet.ServletException: 该类别已经存在
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
cn.alavu.util.EncodeServlet.process(EncodeServlet.java:13)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause cn.alavu.exception.ServiceException: 该类别已经存在
cn.alavu.service.ServiceImpl.createKind(ServiceImpl.java:73)
cn.alavu.action.KindAddAction.execute(KindAddAction.java:45)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
cn.alavu.util.EncodeServlet.process(EncodeServlet.java:13)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
问题就是当我添加类别时,说该类别已经存在,但是数据库里没有这个类别啊,今天上午都可以的,后来不知道动了哪里就不行了,非得把ServiceImpl.java中的if(kdi.get(sess, kindName)!=null) throw new ServiceException("该类别已经存在")这句干掉就可以了,从出现的问题来看kdi.get(sess, kindName)!=null返回的怎么是ture呢?不管你输入的是什么样的类别!搞了一个晚上了,请高手帮忙看下,谢谢!
解决方案 »
- 求一个网站代码
- jsp向sql2000插入数据后......
- 如何才能获得积分,我想下载资料
- jsp如何实现统计图片显示次数
- 从网页上获取内容,转码后中文中有?? (问号)
- jsp连接sqlserver2000,总是报错java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
- 这是什么奇怪的问题啊..改了就不能用了 来解答下 大家
- JSP连接数据库问题!!
- jstl的foreach 如何控制分页页码?
- csdn右边的树是怎么实现的?
- 求一个正则表达式
- 在iframe中怎么取不到Struts2传过来 的值
这句话是干什么的?
package cn.alavu.factory;import java.io.File;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import cn.alavu.util.*;
import cn.alavu.dao.base.Dao;public class DaoFactory {
private Map<String , Dao> daoMap = new HashMap<String , Dao>();
private static DaoFactory df;
private DaoFactory() throws Exception
{
Document doc = new SAXReader().read(new File(ConstantVariable.realPath + "\\daoContext.xml"));
Element base = doc.getRootElement();
List el = base.elements();
for(Iterator it = el.iterator();it.hasNext();)
{
Element em = (Element)it.next();
String id = em.attributeValue("id");
String impl = em.attributeValue("class");
Class implClass = Class.forName(impl);
Dao d = (Dao)implClass.newInstance();
daoMap.put(id, d);
}
}
public static DaoFactory instance()throws Exception
{
if(df==null)
{
df = new DaoFactory();
}
return df;
}
public Dao getDao(String id)
{
return daoMap.get(id);
}
}这个应该没有问题的,我把那句话干掉就可以了啊,但是就不能判断数据库里之前是否存在这个种类啊
{
return (Kind)sess.load(Kind.class, kindName);
}
你的这个方法中kindName是主键吗?返回的类型为Kind后:判断
if(kdi.get(sess, kindName)!=null)
throw new ServiceException("该类别已经存在")
然后抛出你自己定义的异常对吗?我觉得关键地方还是你的get方法,你可以加断点调试跟踪一下
然后有什么问题再贴出来看看……
{
return (Kind)sess.load(Kind.class, kindName);
}
有问题.
session的load()方法会返回一个代理类,所有不管数据库有没有这个记录,他永远返回的都不是一个null对象。
建议使用get()方法
hibernate中session.get/load方法都能通过指定实体类名和id从数据库中读取指定的记录,并且返回与之对映的实体对象。但是它们也有很大的区别:(1)当记录不存在时候,get方法返回null,load方法产生异常(2)load方法可以返回实体的代理类,get方法则返回真是的实体类(3)load方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据,而get方法仅仅在内部缓存中进行数据查找,如果没有发现数据則将越过二级缓存,直接调用SQL查询数据库。
(4) 也许别人把数据库中的数据修改了,load如何在缓存中找到了数据,则不会再访问数据库,
而get则会返回最新数据。