浏览 1129 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2006-08-25
软件环境:
Hibernate 3.2 Jdk 1.5 ant 1.6.5 mysql 5.0.22 配置文件: hibernate.cfg.xml [code:1] <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/SAMPLEDB</property> <property name="connection.username">root</property> <property name="connection.password">********</property> <!-- JDBC connection pool (use the built-in)--> <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.timeout">120</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">120</property> <property name="hibernate.c3p0.acquire_increment">2</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management--> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup--> <property name="hbm2ddl.auto">create</property> <mapping resource="ergal/Customer.hbm.xml"/> <mapping resource="ergal/Order.hbm.xml"/> </session-factory> </hibernate-configuration> [/code:1] Customer.hbm.xml [code:1] <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="ergal.Customer" table="customers" lazy="true"> <id name="id" type="java.lang.Long" column="ID"> <generator class="increment" /> </id> <property name="name" type="java.lang.String" column="NAME" length="15" /> <property name="age" type="java.lang.Integer" column="AGE" length="11" /> <set name="orders" lazy="true" inverse="true" cascade="save-update" > <key> <column name="CUSTOMER_ID" /> </key> <one-to-many class="ergal.Order" /> </set> </class> </hibernate-mapping> [/code:1] Order.hbm.xml [code:1] <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="ergal.Order" table="orders" > <id name="id" type="java.lang.Long" column="ID" > <generator class="increment" /> </id> <property name="orderNumber" type="java.lang.String" column="ORDER_NUMBER" length="15" /> <property name="price" type="java.math.BigDecimal" column="PRICE" length="10" /> <many-to-one name="customer" class="ergal.Customer" not-null="true" cascade="save-update" > <column name="CUSTOMER_ID" /> </many-to-one> </class> </hibernate-mapping> [/code:1] DDL [code:1] drop database if exists SAMPLEDB; create database SAMPLEDB; use SAMPLEDB; create table CUSTOMERS ( ID bigint not null, NAME varchar(15), AGE int, primary key (ID) ); create table ORDERS ( ID bigint not null, ORDER_NUMBER varchar(15), PRICE DECIMAL(10,2), CUSTOMER_ID bigint, primary key (ID) ); alter table ORDERS add index FK8B7256E516B4891C (CUSTOMER_ID), add constraint FK8B7256E516B4891C foreign key (CUSTOMER_ID) references CUSTOMERS (ID); insert into CUSTOMERS(ID,NAME,AGE) values(1,'Tom',21); insert into CUSTOMERS(ID,NAME,AGE) values(2,'Mike',24); insert into CUSTOMERS(ID,NAME,AGE) values(3,'Jack',30); insert into CUSTOMERS(ID,NAME,AGE) values(4,'Linda',25); insert into CUSTOMERS(ID,NAME,AGE) values(5,'Tom',25); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(1,'Tom_Order001',100,1); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(2,'Tom_Order002',200,1); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(3,'Tom_Order003',300,1); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(4,'Mike_Order001',100,2); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(5,'Jack_Order001',200,3); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(6,'Linda_Order001',100,4); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(7,'UnknownOrder',200,null); [/code:1] 错误提示信息: 没有错误提示信息 就是不打印结果 [java] log4j:WARN Please initialize the log4j system properly. [java] Hibernate: select this_.ID as ID1_0_, this_.ORDER_NUMBER as ORDER2_1 _0_, this_.PRICE as PRICE1_0_, this_.CUSTOMER_ID as CUSTOMER4_1_0_ from orders t his_ where this_.CUSTOMER_ID is null 我的方法 找出CUSTOMER_ID为空的Order对象 [code:1] public void find()throws Exception { Session session=sessionFactory.openSession(); Transaction tx=null; try { tx=session.beginTransaction(); List result=session.createCriteria(Order.class) .add(Restrictions.isNull("customer")).list(); for(Iterator it=result.iterator(); it.hasNext();) { Order o =(Order)it.next(); System.out.println("Order's number :" + o.getOrderNumber()); System.out.println("Order's price :" + o.getPrice()); } tx.commit(); } catch(Exception e) { if(tx!=null) { tx.rollback(); } throw e; } finally { session.close(); } } [/code:1] 数据库里有一个没有CUSTOMER_ID的字段 但是运行时就是没有返回结果 而且还有一个问题就是 当我在ant下 run 了以后 Customer 表里的数据都在 Order表被清空了 这种类似的问题困扰我很久了 不知道原因所在 有几个程序都是在运行完后表被清空 这是怎么回事啊? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-08-23
有人遇到过这种情况吗?
或者类似的情况 |
|
| 返回顶楼 | |
|
最后更新时间:2006-08-24
select this_.ID as ID1_0_, this_.ORDER_NUMBER as ORDER2_1
_0_, this_.PRICE as PRICE1_0_, this_.CUSTOMER_ID as CUSTOMER4_1_0_ from orders t his_ where this_.CUSTOMER_ID is null 放到toad上看看能不能找到你说的那个 如果找不到那么就是数据错误 用ant 运行ddl ? 多危险啊 用其它方法运行ddl吧 |
|
| 返回顶楼 | |
|
最后更新时间:2006-08-24
我在数据库里插入了数据之后
运行查询语句 我发现是这种情况 1 所有与Customer的属性相关的查询都没有问题 都能正常返回结果 但是orders表被清空 2 所有查询orders表的内容在查询语句执行之前表都 orders表都被清空了 所以造成这种结果 为什么会这样呢? 另外我还想问个问题 就是如何独立运行含Hibernate的java文件 我把lib都加到CLASSPATH没有用 只能把lib里的*.jar 一个一个的加到CLASSPATH里 好麻烦 |
|
| 返回顶楼 | |
|
最后更新时间:2006-08-25
我终于找到了问题的根源
<property name="hbm2ddl.auto">create</property> |
|
| 返回顶楼 | |




