我的hibernate的配置文件中hbm2ddl.auto设置成了updata后,第一次运行时,当它发现数据库中没有所需要的表时,它不会自动创建那张表吗?把改成create后每次运行后表中之前的数据就会被删除了。请问怎么解决这个问题呢?当第一次运行发现所需要的表没有时,怎么让它给我自动创建?

解决方案 »

  1.   

    用一次create,然后再换回update
      

  2.   

    update:第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库)
    validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
      

  3.   

    我建好了数据库,只是没建表,可用updata时还是报异常,说找不到表,就是说它没有根据model类自动建立表,请问是什么原因呀?
      

  4.   

    第一次用create的话,会不会把其它已经存在的表给重新创建了下呢?那样的话其它之前存在的表里面的数据不就会没有了吗?
      

  5.   

    用create,在你数据库没表的时候会帮你自动生成
                    如果有表的话,貌似会更新你表里的数据.
      

  6.   

    第一次使用update,hibernate会帮你自动生成的,以后只会更新,不会重新创建新个,以下是DDL语句,楼主请看:
    第一次测试:
    23:09:54,781  INFO SchemaUpdate:161 - updating schema
    23:09:54,796  INFO DatabaseMetadata:119 - table not found: hibernate1
    23:09:54,812  INFO DatabaseMetadata:119 - table not found: hibernate1
    23:09:54,812 DEBUG SchemaUpdate:172 - create table hibernate1 (id number(10,0) not null, name varchar2(255 char) not null, primary key (id, name))
    23:09:54,906  INFO SchemaUpdate:183 - schema update complete
    Hibernate: insert into hibernate1 (id, name) values (?, ?)
    第二次测试:
    23:12:07,359  INFO SchemaUpdate:161 - updating schema
    23:12:07,437  INFO TableMetadata:62 - table found: AP.HIBERNATE1
    23:12:07,453  INFO TableMetadata:63 - columns: [id, name]
    23:12:07,453  INFO TableMetadata:65 - foreign keys: []
    23:12:07,453  INFO TableMetadata:66 - indexes: [sys_c006813]
    23:12:07,453  INFO SchemaUpdate:183 - schema update complete
    Hibernate: insert into hibernate1 (id, name) values (?, ?)
    明显第一次调用生成了create语句,但是第二次已经找到了该个,所以只会做更新操作
      

  7.   

    你这个是用JUnit测试写的吗?怎么我第一次用update时它并不给我创建表,而是出现错误说表没有呀?