<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="foo">
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:test</property>
<property name="hibernate.connection.username">test</property>
<property name="hibernate.connection.password">test</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hiernate.hbm2ddl.auto">validate</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="com/asm/hibernate/domain/Student.hbm.xml"/>
<mapping resource="com/asm/hibernate/domain/Teacher.hbm.xml"/> 
</session-factory>
</hibernate-configuration>这是我的hibernate.cfg.xml文件,不管我把hbm2ddl.auto配置成什么值,结果都会把以前建的表删除掉。我的java代表中并没有创建表的语句,请问这是为什么啊????
小弟刚学hibernate,请大侠们帮帮忙,只用到hibernate,没有struts spring.

解决方案 »

  1.   

    <!-- 启动时删数据库中的表,然后创建,退出时不删除数据表
    <property name="hbm2ddl.auto">create</property>-->
    <!-- 启动时删数据库中的表,然后创建,退出时自动删除所有表
    <property name="hbm2ddl.auto">create-drop</property>-->
    <!-- 自动修改,如果表结构与实体类不一致,那么就更新表结构,数据会保留
    (如果原表不存在,就创建新表;如果缺少相应的字段,就加入;对于原来存在的多余字段,不作处理)
    <property name="hbm2ddl.auto">update</property>-->
    <!-- 自动校验,如果表结构与实体类不一致,那么不做任何操作,报错
    <property name="hbm2ddl.auto">validate</property>-->
      

  2.   

    to 1L:这些值含义我都知道啊,问题就是我无论设置成何值都会删除表附上其它的代码吧:
    Student.hbm.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.asm.hibernate.domain">
    <class name="Student">
    <id name="id">
    <generator class="native"></generator>
    </id>
    <property name="name"></property>
    <set name="teachers" table="teacher_student">
    <key column="student_id"/>
    <many-to-many class="Teacher" column="teacher_id"></many-to-many>
    </set>
    </class>
    </hibernate-mapping>Teacher.hbm.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.asm.hibernate.domain">
    <class name="Teacher">
    <id name="id">
    <generator class="native"></generator>
    </id>
    <property name="name"></property>
    <set name="students" table="teacher_student">
    <key column="teacher_id"/>
    <many-to-many class="Student" column="student_id"></many-to-many>
    </set>
    </class>
    </hibernate-mapping>每次执行都会:
    drop table Student cascade constraints
    drop table Teacher cascade constraints
    drop table teacher_student cascade constraints
    drop sequence hibernate_sequence、
    连hibernate_sequence都删除并重建了。真的不可思议。。
    开发环境是eclipse,只用到了hibernate,如果要源码的话可以提供
      

  3.   

    com.asm.hibernate.domain就是放java文件的包了,Teacher.hbm.xml和Student.hbm.xml是在这个包下hibernate.cfg.xml是在src根目录下
    public class Student { private int id;
    private String name ;
    private Set<Teacher> teachers;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public Set<Teacher> getTeachers() {
    return teachers;
    }
    public void setTeachers(Set<Teacher> teachers) {
    this.teachers = teachers;
    }

    }
    上面的是Student.java,Teacher.java和这一样。
    测试代码:s = HibernateUtil.getSession();
    tr = s.beginTransaction();
    Teacher t1 = new Teacher();
    t1.setName("t1Name");
    Teacher t2 = new Teacher();
    t2.setName("t2Name");
    Student s1 = new Student();
    s1.setName("s1Name");
    Student s2 = new Student();
    s2.setName("s2Name");
    Set<Teacher> ts = new HashSet<Teacher>();
    ts.add(t1);
    ts.add(t2);
    Set<Student> ss = new HashSet<Student>();
    ss.add(s1);
    ss.add(s2);
    t1.setStudents(ss);
    t2.setStudents(ss);
    //s1.setTeachers(ts);
    //s2.setTeachers(ts);
    s.save(s1);
    s.save(s2);
    s.save(t1);
    s.save(t2);
    tr.commit();
    控制台上显示的sql信息:
    drop table Student cascade constraints
    drop table Teacher cascade constraints
    drop table teacher_student cascade constraints
    drop sequence hibernate_sequence
    create table Student (id number(10,0) not null, name varchar2(255 char), primary key (id))
    create table Teacher (id number(10,0) not null, name varchar2(255 char), primary key (id))
    create table teacher_student (student_id number(10,0) not null, teacher_id number(10,0) not null, primary key (teacher_id, student_id))
    alter table teacher_student add constraint FK2E2EF2DEA1548DAC foreign key (teacher_id) references Teacher
    alter table teacher_student add constraint FK2E2EF2DE90B9430C foreign key (student_id) references Student
    create sequence hibernate_sequence
    Hibernate: select hibernate_sequence.nextval from dual
    Hibernate: select hibernate_sequence.nextval from dual
    Hibernate: select hibernate_sequence.nextval from dual
    Hibernate: select hibernate_sequence.nextval from dual
    Hibernate: insert into Student (name, id) values (?, ?)
    Hibernate: insert into Student (name, id) values (?, ?)
    Hibernate: insert into Teacher (name, id) values (?, ?)
    Hibernate: insert into Teacher (name, id) values (?, ?)
    Hibernate: insert into teacher_student (teacher_id, student_id) values (?, ?)
    Hibernate: insert into teacher_student (teacher_id, student_id) values (?, ?)
    Hibernate: insert into teacher_student (teacher_id, student_id) values (?, ?)
    Hibernate: insert into teacher_student (teacher_id, student_id) values (?, ?)
    每次都是这样的sql信息