卡彼得
2009-11-03 13:30
浏览 276
已采纳

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脚本.

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • weixin_42519046 2009-11-05 09:37
    已采纳

    这样不行的,其中有属性Jbdata,是自定义的一个BEAN。 如果是自己定义的BEAN对象,要这样写,给你个我写的例子:
    StringBuffer sql=new StringBuffer();
    sql.append("select t.disingerid as \"disingerid\",t.dcsingername as \"dcsingername\",t.dcsingerdes as \"dcsingerdes\",t.dcsingerimage as \"dcsingerimage\",p.dctypename as \"ditypeid\" ");
    sql.append("from iphoneuser.imosinger t,iphoneuser.imotype p ");
    sql.append("where p.ditypeid=t.ditypeid and t.dcsingersex=:dcsingersex");

    [color=red]List l=super.getSession().createSQLQuery(sql.toString())
    .setParameter("dcsingersex", sf.getDcsingersex())
    .setResultTransformer(Transformers.aliasToBean(Singer.class)).list();[/color]

    Singer也是自己定义的BEAN

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题