hibernate自动删除以前的表

lg_asus 2011-07-10 06:13:49

<!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.
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
王莹月 2012-06-15
  • 打赏
  • 举报
回复
你是成功了,哥杯具了,搞死了
lg_asus 2011-07-22
  • 打赏
  • 举报
回复
时隔2周,无奈只能删除重建项目,这次竟然成功了

我都不知道为什么。。。
lg_asus 2011-07-10
  • 打赏
  • 举报
回复
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信息
lg_asus 2011-07-10
  • 打赏
  • 举报
回复
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,如果要源码的话可以提供
soo520 2011-07-10
  • 打赏
  • 举报
回复
<!-- 启动时删数据库中的表,然后创建,退出时不删除数据表
<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>-->

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧