论坛首页 Java企业应用论坛

求助:关于hql的一个问题

浏览 6158 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-10-24  
各位高手!我的程序用的是sql server 数据库,程序在进行load()   save() 等命令执行时成功!但用find()命令出错,请 指点一二,不胜感谢!!
 List L_p1 = s.find(
                    "select person.id person.name from Person as person  " +
                    "where person.name =?",
                    "王志",
                    Hibernate.STRING
                     );;
            System.out.println("find 2  显示");;
            Person p5 =(Person);L_p1.get(0);;
            System.out.println(p5.getName(););;
            System.out.println(p5.getId(););;
            System.out.println(L_p1.size(););;

错误提示:
net.sf.hibernate.QueryException: , expected in SELECT [select person.id person.name from h.Person as person  where person.name =?]

	at net.sf.hibernate.hql.SelectParser.token(SelectParser.java:152);

	at net.sf.hibernate.hql.ClauseParser.token(ClauseParser.java:87);

	at net.sf.hibernate.hql.ClauseParser.end(ClauseParser.java:114);

	at net.sf.hibernate.hql.PreprocessingParser.end(PreprocessingParser.java:140);

	at net.sf.hibernate.hql.ParserHelper.parse(ParserHelper.java:30);

	at net.sf.hibernate.hql.QueryTranslator.compile(QueryTranslator.java:146);

	at net.sf.hibernate.hql.QueryTranslator.compile(QueryTranslator.java:133);

	at net.sf.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:352);

	at net.sf.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:330);

	at net.sf.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1368);

	at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1332);

	at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1322);

	at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1318);

	at h.TestPerson.main(TestPerson.java:66);

Exception in thread "main"
[/swf]
[/b]
   发表时间:2003-10-24  
引用

"select person.id person.name from Person as person  " +

person.id person.name中间少个逗号。
0 请登录后投票
   发表时间:2003-10-24  
引用
但加了以后问题变化!!不能正常显示!
错误:java.lang.ClassCastException: [Ljava.lang.Object;

	at h.TestPerson.main(TestPerson.java:73);

Exception in thread "main" find 2  显示
0 请登录后投票
   发表时间:2003-10-24  
引用

List L_p1 = s.find(
                    "select person.id, person.name from Person as person  " +
                    "where person.name =?",
                    "王志",
                    Hibernate.STRING
                     );

L_p1中的每个元素是Object[2]

改为:
Object[] p5 =(Object[]);L_p1.get(0);; 
            System.out.println(p5[0]);; 
            System.out.println(p5[1]);; 
            System.out.println(L_p1.size(););; 
0 请登录后投票
   发表时间:2003-10-24  
谢谢!
不好意思!问题还存在!!
我是新手,请帮我再看一下!!
0 请登录后投票
   发表时间:2003-10-24  
没道理呀,还是这个错误?
0 请登录后投票
   发表时间:2003-10-24  
zqw 写道
谢谢!
不好意思!问题还存在!!
我是新手,请帮我再看一下!!

晕啊,你给出完整错误信息,和错误代码才可以知道。
0 请登录后投票
   发表时间:2003-10-24  

package h;

import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
import  java.util.List;
import  java.lang.Object;
import net.sf.hibernate.*;
//import net.sf.hibernate.Hibernate;

//import  net.sf.hibernate.QueryException;
//import   net.sf.hibernate.hql.SelectParser;
class TestPerson{

private static SessionFactory sessions;

    public static void main(String[] args) throws Exception{
    //配置环境,分析xml映射文件
    Configuration conf= new Configuration()
.addClass(Person.class);

        //生成并输出sql到文件(当前目录)和数据库
        SchemaExport dbExport=new SchemaExport(conf);
        dbExport.setOutputFile("sql.txt");
        //dbExport.create(true, true);

sessions = conf.buildSessionFactory();
        //以上都是些固定格式的环境配置

        //start......
        Session s = sessions.openSession();
Transaction t =  s.beginTransaction();

        //1.用普通使用方式建立对象,填充数据
    Person p1=new Person();
    p1.setName("姚明");
    p1.setAddress("西安电子科技大学");
            Person p2=new Person();
         p2.setName("王志");
    p2.setAddress("西安电子科技大学");

            //2.查询读取数据到对象中 Person p3=new Person();----已知标识符时
            String s1="4028d25af858778100f8587788940001";
            Person p3 = (Person) s.load(Person.class, s1);
            //查看p3中的记录
            System.out.println("LOAD显示");
            System.out.println(p3.getName());
            System.out.println(p3.getAddress());

            //3.未知标识符的查询读取方法
            String name="姚明";
            List L_p = s.find(
               " from Person " +
               "where name = ?",
                name,
                Hibernate.STRING
                );
            System.out.println("find 显示");
            Person p4 =(Person)L_p.get(0);
            System.out.println(p4.getName());
            System.out.println(p4.getAddress());
            System.out.println(L_p.size());

             //4.查询实例二
            List L_p1 = s.find(
                    "select person.id ,person.name from Person as person  " +
                    "where person.name =?",
                    "王志",
                    Hibernate.STRING
                     );
            System.out.println("find 2  显示");
            Object[] p5 =(Object[])L_p1.get(0);
            //System.out.println(p5.getName());
            //System.out.println(p5.getId());
            System.out.println(p5[0]);
            System.out.println(p5[1]);


            System.out.println(L_p1.size());
            //5.update()应用
            Person p6=new Person();
          p6.setName("巴特");
           p6.setId("4028d25af8587e5400f8587e5acd0002");
          p6.setAddress("西安电子科技大学1");
          Person p7=new Person();
           p7.setId("4028d25af858980900f8589811dc0003");
           p7.setName("孙继");
    p7.setAddress("西安电子科技大学1");
            s.update( p7,"4028d25af858980900f8589811dc0001");

    //6.持久化
    s.save(p1);
            s.save(p2);
//此时p1、p2已经可以在数据库中找到

    t.commit();
    s.close();
    }
}
这是一个正确的程序,请各位参考
0 请登录后投票
   发表时间:2003-10-24  
update()时如何根据需要修改 ID 呢?
0 请登录后投票
   发表时间:2003-10-24  
天!我发现错误了!!
不好意思!:)数组定义错!没道理....
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics