你应该从"怎么确定save执行了"这个角度出查询问题!
我提两点:
    1\例用try{}catch(){},查看是否有异常
    2\把hibernate.show_sql设置true 看看语句是否真的运行

解决方案 »

  1.   


    同意,比如,你可以在save之后,马上读取出来看看
      

  2.   

    show_sql  語句 沒有 insert into  也就是說沒有插入數據,但是為什麼不會報異常呢?這是dao 自帶save 方法: public void save(Cusert transientInstance) {
    log.debug("saving Cusert instance");
    try {
    getSession().save(transientInstance);
    log.debug("save successful");
    } catch (RuntimeException re) {
    log.error("save failed", re);
    throw re;
    }
    }我只是調用這個方法. 數據保存不進! 我採用debug  模式進行調試,Cusert 對象不是空的,而且this.getCusertDao.save(cusert)方法能夠執行下去,但是
    我立即進行查詢 發現cusert 變成空的了! 後來我直接在青蛙(toad) 進行insert into 發現能夠實現!我主鍵設成 assigned . 
      

  3.   

    assigned ???我有些担心,你是不是更新了某个记录,呵呵呵! 
    1 把dao的某个属性设置为一个好看的字符串,比如############, 执行后看看数据库是不是有这个字段
    2 把hibernate的 show_sql 打开,看看数据库是不是执行了 insert
      

  4.   

    你插入的表的映射文件
    是否做了关联!主键模式:assigned比如你把 char(20)类型的字段映射为id,id主键生成模式是assigned,
    当你保存记录的时候,若Key不到20位,你必须把key补满20位,
    否则会失败的
      

  5.   

    發現insert into  沒有執行!詳細如下,大家看看:action 
    fno uname 不是空的
    cusert = this.cusertImpl.creteNewuer(fno, fno, "BDS", uname);//創建一個新的用戶try{
    this.cusertImpl.saveCusert(cusert);//保存到數據庫
    }catch(Exception e){e.printStackTrace();}CusertImpl 類:
    public Cusert creteNewuer(String userid, String upwd, String rid, String uname){
       return new Cusert(userid,upwd,rid,uname);//初始化這個用戶對象
    }Cusert 類:
    public class Cusert extends AbstractCusert implements java.io.Serializable { private static final long serialVersionUID = 1L;
    public Cusert() {
    }
    public Cusert(String userid, String upwd, String rid, String uname) {
    super(userid, upwd, rid, uname); }}AbstractCusert 類:
    public abstract class AbstractCusert implements java.io.Serializable {
    private String userid;
    private String upwd;
    private String rid;
    private String uname; public AbstractCusert() {
    } public AbstractCusert(String userid, String upwd, String rid, String uname) {
    this.userid = userid;
    this.upwd = upwd;
    this.rid = rid;
    this.uname = uname;
    }
      ---get set 方法略---
    }Cusert.hbm.xml 文件:
    <hibernate-mapping>
        <class name="com.nb.po.Cusert" table="CUSERT" schema="NB">
            <id name="userid" type="java.lang.String">
                <column name="USERID" length="8" />
               <generator class="native" />//原來是Assigned  修改了一下
            </id>
            <property name="upwd" type="java.lang.String">
                <column name="UPWD" length="10" not-null="true" />
            </property>
            <property name="rid" type="java.lang.String">
                <column name="RID" length="3" not-null="true" />
            </property>
            <property name="uname" type="java.lang.String">
                <column name="UNAME" length="20" not-null="true" />
            </property>
        </class>
    </hibernate-mapping>
      

  6.   

    发现你的问题不小哟!
    native要求数据列的类型的long,short,int.(好像没有记错,我去查一下书,呵)你应当把表的设置修改成int的
    如果影响大的话,还使用assigned ,不过要自己行设置ID值
      

  7.   

    对没错,native 由Hibernate根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式
    而三种主键生成器要求的数据类型应为long,short,int你自己看着办吧!开饭了!
      

  8.   

    謝謝大家,現在又報這個錯誤了????
    Hibernate: select hibernate_sequence.nextval from dual
    org.hibernate.exception.SQLGrammarException: could not get next sequence valueCaused by: java.sql.SQLException: ORA-02289: sequence does not exist at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:184)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:241)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1477)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:677)
    at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2243)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2462)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:435)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:375)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
    at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:75)
    ... 35 more
      

  9.   

    这是说取不到序列值,将ID改回ASSIGNED,自己分配一个吧
      

  10.   

    主鍵生成方式不是  sequence 啊!
      

  11.   

    我的主鍵式userid, 是不是必須補滿8位?????????????????????
      

  12.   

    現在發現 如果 主键模式:assigned   不會報錯,但是不會insert into    如果是:native ,就會有上面的報錯 .我隱約感覺到我可能犯了大錯了!!!!!!!!!!! 大家议一议
      

  13.   

    could not get next sequence value需要在hbm.xml文件中配置id主键生成为sequence并确保数据库中有对应id的序列
      

  14.   


    assigned主键生成器,要求自己设置主键值
    通过
    <column name="USERID" length="8" />
    8位的字符型
      

  15.   

    native主键是自增长的,不用负值
    assigned主键是自己负值的
      

  16.   

    該問題已經解決拉是dao 的save 方法問題
      

  17.   

    ....................无语
    save除了 插入新值,和更新纪录外还有什么问题?还是不懂,能否把具体原因发E-mail给我?
    谢谢 
    [email protected]