Hibernate查询数据时出现的问题

相关参数:MyEclipse7,MySQL5,Hibernate 3.2,Spring 2.0,Struts 1.2.
问题概述:使用SSH搭建,提供了方法eqField(String field,String value),该方法使用QBC查询,field填写查询字段,value填写值,然后返回该实体的List,库中[字段=‘值’]的实体全部取出。但是在操作中出现了如下异常信息,我试图使用手工写HQL的方式,仍然不好用。
异常信息:
org.springframework.orm.hibernate3.HibernateSystemException: IllegalArgumentException occurred calling getter of com.kupid.domain.Jbdata.id; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.kupid.domain.Jbdata.id
相关代码段:
项目实体使用Hibernate的反向工程从DB自动生成。
Jbcomment实体,其中有属性Jbdata,是自定义的一个BEAN。
[code="java"]
public class Jbcomment implements java.io.Serializable {

// Fields

private String id;
private Jbfield jbfield;
private Jbdata jbdata;
private String name;
private Integer flag;
private Date creatdate;
private Date lastupdate;
private String pre1;
private String pre2;
private String pre3;

[/code]
实体Jbdata
[code="java"]
public class Jbdata implements java.io.Serializable {

// Fields

private String id;
private Jbtype jbtype;
private String name;
private Date createrdate;
private Date lastdate;
private Integer flag;

[/code]
在实体Jbcomment的操作实现类JbcommentDaoImpl中,提供了eqField方法,该类代码片段如下:
[code="java"]

public class JbcommentDaoImpl extends BaseDaoImpl implements JbcommentDao {
public List findAll()
{
return (List) ht.execute(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException,
SQLException {
Criteria c = s.createCriteria(Jbcomment.class);
c.add(Restrictions.like("id","%"));
return c.list();
}

});
}
public List eqField(final String field,final String value) {

    return  (List<Jbcomment>) ht.execute(new HibernateCallback() {
            public Object doInHibernate(Session s) throws HibernateException,
            SQLException {
                Criteria c = s.createCriteria(Jbcomment.class);
                c.add(Restrictions.eq(field,value));
                return c.list();
                }   
            });
}

[/code]
在对应的Service中注入了上述JbcommentDaoImpl,其中getField_eq方法无任何差异的调用了eqField。
[code="java"]
public class JbcommentServiceImpl implements JbcommentService {
private JbcommentDao jbcommentDao;
public List getField_eq(String field,String value)
{
return jbcommentDao.eqField(field, value);
}

[/code]
然后,某个操作调用了一个showDataDetail.do,其片段如下:
[code="java"]
public class ShowDataDetail extends Action {
private JbcommentServiceImpl cmtsi;
private JbfieldServiceImpl fieldsi;
private JbdataServiceImpl datasi;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception{
System.out.println("Create a detail");
try
{
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String dataId=request.getParameter("id");
String keywords=request.getParameter("keywords");
List list=cmtsi.getField_eq("jbdata", dataId);
[/code]
在最后一行,取list的时候,异常出现了。
希望得到一个详细的,明确的分析。若是如:“详见XX书”,“答案可访问XX网”,“自己去看API”等回答,就不劳烦您了。
谢谢指教。
关于源码:
源码以问题附件的形式上传了,因为jar包超过了附件的10M限制而被剔除。
源码内包名domain,persist,service,actions,顾名思义不做多解释了。
jar包移出后传至Rayfile了,其下载地址为 http://www.rayfile.com/files/e8680f6e-c838-11de-ab98-0014221b798a/
数据库以SQL校本形式导出,本人常用MySQL-Administrator,所以先用该工具导出,但由于该工具导出的脚步的DB倒回在其他工具中可能存在编码问题,于是又用Navicat导出了一份通用性好的 sql脚本.

查看全部
Kupid
卡彼得
2009/11/03 13:30
  • hibernate
  • 点赞
  • 收藏
  • 回答
    私信
满意答案
查看全部

0个回复