我不想要hibernate自动去生成主键,也不想在配置文件里面使用sequnce,我要自己得到oracle的sequnce,怎样获取,已经试过用sql语句,但是执行报错,给个代码

解决方案 »

  1.   

    使用原生sql
    select seq_name.nextVal from dual
      

  2.   

    不行就加个别名:
    select seq_name.nextVal as myID from dual
      

  3.   

    再不行就加上序列所属用户的schema如:
    select jsf.seq_name.nextVal as myID from dual;
    jsf为用户名
      

  4.   

    你的sequence在数据库里如果创建的用户和当前连接到数据库的用户不一样,一定要加上sequence
    的schema,或为sequence建当前连接到数据库的用户同义词
      

  5.   

    你们说的方法我试了,一执行SQL语句就报空指针异常
    public   int   getId(final   String   seqname){ 
      Number   n=(Number)this.getHibernateTemplate().execute(new HibernateCallback(){  public   Object   doInHibernate(Session   session)   throws SQLException, HibernateException   { 
                                          SQLQuery   query   =   session.createSQLQuery( 
                                                          "select   "+seqname+ ".nextval     SEQID     from   dual "); 
                                          query.addScalar( "SEQID ",   new   org.hibernate.type.IntegerType()); 
                                          List   children   =   query.list(); 
                                          return   (Number)   children.iterator().next(); 
                                  } 
                          } 
                    ); 
      return   n.intValue(); 

    public List exeSql(String sql){
    return sessionFactory.getCurrentSession().createSQLQuery(sql).addScalar("SEQID").list(); }这两种方法都是报空指针
      

  6.   

    哪个地方报出来的空?跟踪一下,具体到对象。connection 空也是空,你的参数seqname空也是空。。
      

  7.   

    query.addScalar( "SEQID ", new org.hibernate.type.IntegerType()); 你这里写错了吧,都是写的query.addScalar("SEQID",Hibernate.INTEGER); 
    包名是:org.hibernate.Hibernate;
      

  8.   

    你直接取出对象,自己转成Integer不就完了吗,还搞什么addScalar;另外还用个Number转成Integer,多费劲呀!public int getId(final String seqname){  
        public int getId(final String seqname) {
            Integer n = (Integer) this.getHibernateTemplate().execute(new HibernateCallback() {
                public Object doInHibernate(Session session) throws SQLException, HibernateException {
                    SQLQuery query = session.createSQLQuery("select " + seqname + ".nextval SEQID from dual ");
                    //query.addScalar("SEQID ", new org.hibernate.type.IntegerType());
                    List children = query.list();
                    if(children.isEmpty()){
                        return null;
                    }
                    else{
                        String s = children.get(0).toString();
                        return Integer.parseInt(s);
                    }
                }
            });
            return n;
        }