论坛首页 Java版 Hibernate

(已解决)不出错 也不返回结果 执行完 数据却被清空

浏览 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表被清空了 这种类似的问题困扰我很久了 不知道原因所在
有几个程序都是在运行完后表被清空
这是怎么回事啊?
   
最后更新时间:2006-08-23
有人遇到过这种情况吗?
或者类似的情况
   
0 请登录后投票
最后更新时间: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吧
   
0 请登录后投票
最后更新时间:2006-08-24
我在数据库里插入了数据之后
运行查询语句
我发现是这种情况
1 所有与Customer的属性相关的查询都没有问题 都能正常返回结果 但是orders表被清空
2 所有查询orders表的内容在查询语句执行之前表都 orders表都被清空了
所以造成这种结果
为什么会这样呢?

另外我还想问个问题
就是如何独立运行含Hibernate的java文件 我把lib都加到CLASSPATH没有用
只能把lib里的*.jar 一个一个的加到CLASSPATH里 好麻烦
   
0 请登录后投票
最后更新时间:2006-08-25
我终于找到了问题的根源
<property name="hbm2ddl.auto">create</property>
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐