论坛首页 Java企业应用论坛

为什么我的表被删除了?

浏览 13001 次
该帖已经被评为精华帖
作者 正文
   发表时间:2003-09-16  
session建立的时候会删除数据库中的表么?(初学不懂)
================程序=============
    Configuration cfg = new Configuration();.addClass(Bzqj.class);;
    SessionFactory sessions = cfg.buildSessionFactory();;
    Session s = sessions.openSession();;
    Query q = s.createQuery("from Bzqj");;
    for (Iterator it = q.iterate();;it.hasNext();; );{
      Bzqj b = (Bzqj);it.next();;
      System.out.println("##JGBH:"+b.getJGBH(););;
    }
执行后,数据库中原来的表没了,怎么回事?
   发表时间:2003-09-16  
肯定不是Hibernate的问题,Hibernate还不具备向数据库发送DDL语句的功能耶
0 请登录后投票
   发表时间:2003-09-16  
test.java
package hibernatedemo;

import hibernatedemo.person;
import java.util.*;

import net.sf.hibernate.Query;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;

public class Test {
 public static void main(String[] args); throws Exception {
   Configuration cfg = new Configuration();.addClass(person.class);;
   SessionFactory sessions = cfg.buildSessionFactory();;
   new SchemaExport(cfg);.create(true, true);;
   Session s = sessions.openSession();;
   Query q = s.createQuery("from person");;
   for (Iterator it = q.iterate();;it.hasNext();;);{
     person b = (person);it.next();;
     System.out.println("##name:"+b.getName(););;
   }
 }
}

person.java
package hibernatedemo;

public class person {
  private String name;
  private String address;
  private String id;
  public person();{

  }
  public String getId(); {
    return id;
  }
  public void setId(String id); {
    this.id = id;
  }
  public String getName(); {
    return name;
  }
  public void setName(String name); {
    this.name = name;
  }
  public String getAddress(); {
    return address;
  }
  public void setAddress(String address); {
    this.address = address;
  }
}

person.hbm.xml
<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
  <class name="hibernatedemo.person" >
    <id  name="id" 
         column="id"
         type="java.lang.String">
      <generator
         class="assigned"/>   
    </id>
    <property
         name="name"
         type="java.lang.String"
         column="name"/>
    <property
         name="address"
         type="java.lang.String"
         column="pass"/>
  </class>       
</hibernate-mapping>

数据库是mysql,服务器tomcat
执行的时候控制台信息
2003-9-16 10:36:12 net.sf.hibernate.cfg.Environment <clinit>

信息: Hibernate 2.1 beta 3

2003-9-16 10:36:12 net.sf.hibernate.cfg.Environment <clinit>

信息: loaded properties from resource hibernate.properties: {hibernate.connection.driver_class=com.mysql.jdbc.Driver, hibernate.cglib.use_reflection_optimizer=true, hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect, hibernate.jdbc.use_streams_for_binary=true, hibernate.jdbc.batch_size=0, hibernate.query.substitutions=true 1, false 0, yes 'Y', no 'N', hibernate.query.imports=net.sf.hibernate.test, net.sf.hibernate.eg, hibernate.connection.username=root, hibernate.connection.url=jdbc:mysql://localhost/hibernatedb, hibernate.connection.password=, hibernate.statement_cache.size=25, hibernate.connection.pool_size=1}

2003-9-16 10:36:12 net.sf.hibernate.cfg.Environment <clinit>

信息: using java.io streams to persist binary types

2003-9-16 10:36:12 net.sf.hibernate.cfg.Environment <clinit>

信息: using CGLIB reflection optimizer

2003-9-16 10:36:12 net.sf.hibernate.cfg.Configuration addClass

信息: Mapping resource: hibernatedemo/person.hbm.xml

2003-9-16 10:36:15 net.sf.hibernate.cfg.Binder bindRootClass

信息: Mapping class: hibernatedemo.person -> person

2003-9-16 10:36:15 net.sf.hibernate.cfg.Configuration secondPassCompile

信息: processing one-to-many association mappings

2003-9-16 10:36:15 net.sf.hibernate.cfg.Configuration secondPassCompile

信息: processing one-to-one association property references

2003-9-16 10:36:15 net.sf.hibernate.cfg.Configuration secondPassCompile

信息: processing foreign key constraints

2003-9-16 10:36:15 net.sf.hibernate.dialect.Dialect <init>

信息: Using dialect: net.sf.hibernate.dialect.MySQLDialect

2003-9-16 10:36:15 net.sf.hibernate.cfg.SettingsFactory buildSettings

信息: Use outer join fetching: true

2003-9-16 10:36:15 net.sf.hibernate.connection.DriverManagerConnectionProvider configure

信息: Using Hibernate built-in connection pool (not for production use!);

2003-9-16 10:36:15 net.sf.hibernate.connection.DriverManagerConnectionProvider configure

信息: Hibernate connection pool size: 1

2003-9-16 10:36:15 net.sf.hibernate.connection.DriverManagerConnectionProvider configure

信息: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost/hibernatedb

2003-9-16 10:36:15 net.sf.hibernate.connection.DriverManagerConnectionProvider configure

信息: connection properties: {user=root, password=}

2003-9-16 10:36:15 net.sf.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup

信息: No TransactionManagerLookup configured (use of process level read-write cache is not recommended);

2003-9-16 10:36:16 net.sf.hibernate.cfg.SettingsFactory buildSettings

信息: Use scrollable result sets: true

2003-9-16 10:36:16 net.sf.hibernate.cfg.SettingsFactory buildSettings

信息: Query language substitutions: {no='N', true=1, yes='Y', false=0}

2003-9-16 10:36:16 net.sf.hibernate.cfg.SettingsFactory buildSettings

信息: cache provider: net.sf.hibernate.cache.JCSCacheProvider

2003-9-16 10:36:16 net.sf.hibernate.cfg.Configuration configureCaches

信息: instantiating and configuring caches

2003-9-16 10:36:16 net.sf.hibernate.impl.SessionFactoryImpl <init>

信息: building session factory

2003-9-16 10:36:18 net.sf.hibernate.impl.SessionFactoryObjectFactory addInstance

信息: no JNDI name configured

2003-9-16 10:36:18 net.sf.hibernate.dialect.Dialect <init>

信息: Using dialect: net.sf.hibernate.dialect.MySQLDialect

2003-9-16 10:36:18 net.sf.hibernate.cfg.Configuration secondPassCompile

信息: processing one-to-many association mappings

2003-9-16 10:36:18 net.sf.hibernate.cfg.Configuration secondPassCompile

信息: processing one-to-one association property references

2003-9-16 10:36:18 net.sf.hibernate.cfg.Configuration secondPassCompile

信息: processing foreign key constraints

2003-9-16 10:36:18 net.sf.hibernate.cfg.Configuration secondPassCompile

信息: processing one-to-many association mappings

2003-9-16 10:36:18 net.sf.hibernate.cfg.Configuration secondPassCompile

信息: processing one-to-one association property references

2003-9-16 10:36:18 net.sf.hibernate.cfg.Configuration secondPassCompile

信息: processing foreign key constraints

2003-9-16 10:36:18 net.sf.hibernate.tool.hbm2ddl.SchemaExport execute

信息: Running hbm2ddl schema export

2003-9-16 10:36:18 net.sf.hibernate.tool.hbm2ddl.SchemaExport execute

信息: exporting generated schema to database

2003-9-16 10:36:18 net.sf.hibernate.connection.DriverManagerConnectionProvider configure

信息: Using Hibernate built-in connection pool (not for production use!);

2003-9-16 10:36:18 net.sf.hibernate.connection.DriverManagerConnectionProvider configure

信息: Hibernate connection pool size: 1

2003-9-16 10:36:18 net.sf.hibernate.connection.DriverManagerConnectionProvider configure

信息: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost/hibernatedb

2003-9-16 10:36:18 net.sf.hibernate.connection.DriverManagerConnectionProvider configure

信息: connection properties: {user=root, password=}

drop table person

create table person (
   id VARCHAR(255); not null,
   name VARCHAR(255);,
   pass VARCHAR(255);,
   primary key (id);
);

2003-9-16 10:36:18 net.sf.hibernate.tool.hbm2ddl.SchemaExport execute

信息: schema export complete

2003-9-16 10:36:18 net.sf.hibernate.connection.DriverManagerConnectionProvider close

信息: cleaning up connection pool: jdbc:mysql://localhost/hibernatedb

2003-9-16 10:36:18 net.sf.hibernate.connection.DriverManagerConnectionProvider close

信息: cleaning up connection pool: jdbc:mysql://localhost/hibernatedb
0 请登录后投票
   发表时间:2003-09-16  
呵呵,难怪,难怪,原来Hibernate也可以自动建表,枉我还在jdon和别人争,被别人说JDO有自动建表功能,Hibernate没有,原来也是有滴。
0 请登录后投票
   发表时间:2003-09-16  
:) HAHA,问题解决,谢谢2位的帮忙。 我郁闷了1天了
0 请登录后投票
   发表时间:2003-09-16  
呵呵,其实我早就在用了, 只不过一直糊涂的认为不支持。

      SchemaExport dbExport = new SchemaExport(conf);;
      dbExport.setOutputFile("db\\testsub.txt");;
      dbExport.create(true, true);;


dbExport.create(true, true); 方法中第一个参数是用来决定是否产生DDL,第二个参数是用来决定是否执行DDL
0 请登录后投票
   发表时间:2003-09-18  
关于自动建表我们通常需要这样的功能:

数据库中不存在表的话则创建,如果存在就不要先Drop再创建了。否则数据都丢失了。

这样我们的系统打包后第一次运行就可以建好表,以后就使用这些表而不再创建了。

各位有何好的方法?
0 请登录后投票
   发表时间:2003-09-18  
你可以先尝试着查询一下,如果捕获的异常说明没有表,就创建之;反之则不创建
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics