-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Data being deleted on a simple query
PostPosted: Tue Dec 06, 2005 2:13 am 
Newbie

Joined: Wed Aug 31, 2005 8:06 pm
Posts: 5
Hi,

I'm having problems with a fairly simple bi-directional relationship (one-to-many). These objects are not in a Parent/Child relationship, but when I do a query on the top level object, hibernate deletes all the objects from the db for both the top level and the lower-level object. Below is all the relevant information. Note that a Product can have multiple PaymentDetail, but when I encounter the problem there are no relationships between the items in the existing data. You can see below, after the session.close(), there is a series of deletes performed bby Hibernate.

Any help is highly appreciated!

Regards
Chris.


Hibernate version: 3

Mapping documents:

<hibernate-mapping>

<class name="au.com.qantas.ecomm.payment.model.product.Product" table="TCEO_DELAYED_PAYMENT_PRODUCT" mutable="true" lazy="false">

<!-- Primary key -->
<id name="id" type="integer" unsaved-value="null" column="PRODUCT_ID">
<generator class="increment"/>
</id>
<set name="payments" lazy="false" cascade="none" inverse="true">
<key column="PRODUCT_ID"/>
<one-to-many class="au.com.qantas.ecomm.payment.model.payments.Payment"/>
</set>

</class>

</hibernate-mapping>

<hibernate-mapping>

<class name="au.com.qantas.ecomm.payment.model.payments.Payment" table="TCEO_PAYMENT_DETAIL" mutable="true" lazy="false">

<!-- Primary key -->
<!--<id name="id" type="integer" unsaved-value="null">-->
<id name="id" column="PAYMENT_DETAIL_ID">
<generator class="increment"/>
</id>

<many-to-one name="product" class="au.com.qantas.ecomm.payment.model.product.Product" column="PRODUCT_ID" cascade="none"/>

</class>
</hibernate-mapping>

Code between sessionFactory.openSession() and session.close():

Session session = HibernateUtil.getSession();
List products = null;

try {
System.out.println("before Criteria");
Criteria criteria = session.createCriteria(Product.class);
System.out.println("before criteria.add");
criteria.add(Restrictions.eq("status", status));

System.out.println("before products");
products = criteria.list();
System.out.println("before Hibernate.initialize");
Hibernate.initialize(products);

if (products == null)
products = new ArrayList();

} catch (HibernateException hibernateException) {

if (LOGGER.isLoggable(Level.SEVERE)) {
LOGGER.log(Level.SEVERE, "Hibernation error getting product in ProductDAO", hibernateException);
}
throw new DAOException(hibernateException);
} catch (Exception exception) {
if (LOGGER.isLoggable(Level.SEVERE)) {
LOGGER.log(Level.SEVERE, "Exception caught: ", exception);
}
} finally {
try {
System.out.println("before session.close()");
session.close();
System.out.println("after session.close()");

Name and version of the database you are using: Oracle 8i

The generated SQL (show_sql=true):

before Criteria
before criteria.add
before products
Hibernate: select this_.PRODUCT_ID as PRODUCT1_0_, this_.PRODUCT_CONTACT_NAME as PRODUCT3_0_0_, this_.CUST_REF_NUMBER as CUST4_0_0_, this_.TOTAL_FARE_
AUD_AMT as TOTAL5_0_0_, this_.PRODUCT_CONTACT_EMAIL_TEXT as PRODUCT6_0_0_, this_.PRODUCT_CREATION_DATE as PRODUCT7_0_0_, this_.PRODUCT_PAYMENT_EXPIRY_DATE as PRODUCT8_0_0_, this_.PRODUCT_CURR_PAYM_STATUS_CODE as PRODUCT9_0_0_, this_.PRODUCT_CODE as PRODUCT10_0_0_, this_.PRODUCT_TYPE_CODE as PRODUCT2_0_ from TCEO_DELAYED_PAYMENT_PRODUCT this_ where this_.PRODUCT_CURR_PAYM_STATUS_CODE=?
Hibernate: select payments0_.PRODUCT_ID as PRODUCT8_1_, payments0_.PAYMENT_DETAIL_ID as PAYMENT1_1_, payments0_.PAYMENT_DETAIL_ID as PAYMENT1_0_, payments0_.PAYMENT_AMT as PAYMENT3_5_0_, payments0_.CUST_REF_NUMBER as CUST4_5_0_, payments0_.PAYMENT_TSP as PAYMENT5_5_0_, payments0_.PAYMENT_DR_CR_TYPE_CODE as PAYMENT6_5_0_, payments0_.PAYMENT_CURRENT_STATUS_CODE as PAYMENT7_5_0_, payments0_.PRODUCT_ID as PRODUCT8_5_0_, payments0_.PAYMENT_ACCOUNT_ID as PAYMENT9_5_0_, payments0_.PAYMENT_TXN_REF_NUMBER as PAYMENT10_5_0_, payments0_.PAYMENT_INSTRUCTION_CODE as PAYMENT11_5_0_, payments0_.PAYMENT_METHOD_CODE as PAYMENT12_5_0_, payments0_.PAYMENT_REASON_DESC as PAYMENT13_5_0_, payments0_.PAYMENT_ORGNL_TXN_REF_NUMBER as PAYMENT14_5_0_, payments0_.DELAYED_PAYMENT_TYPE_CODE as DELAYED2_0_ from TCEO_PAYMENT_DETAIL payments0_ where payments0_.PRODUCT_ID=?
Hibernate: select payments0_.PRODUCT_ID as PRODUCT8_1_, payments0_.PAYMENT_DETAIL_ID as PAYMENT1_1_, payments0_.PAYMENT_DETAIL_ID as PAYMENT1_0_, payments0_.PAYMENT_AMT as PAYMENT3_5_0_, payments0_.CUST_REF_NUMBER as CUST4_5_0_, payments0_.PAYMENT_TSP as PAYMENT5_5_0_, payments0_.PAYMENT_DR_CR_TYPE_CODE as PAYMENT6_5_0_, payments0_.PAYMENT_CURRENT_STATUS_CODE as PAYMENT7_5_0_, payments0_.PRODUCT_ID as PRODUCT8_5_0_, payments0_.PAYMENT_ACCOUNT_ID as PAYMENT9_5_0_, payments0_.PAYMENT_TXN_REF_NUMBER as PAYMENT10_5_0_, payments0_.PAYMENT_INSTRUCTION_CODE as PAYMENT11_5_0_, payments0_.PAYMENT_METHOD_CODE as PAYMENT12_5_0_, payments0_.PAYMENT_REASON_DESC as PAYMENT13_5_0_, payments0_.PAYMENT_ORGNL_TXN_REF_NUMBER as PAYMENT14_5_0_, payments0_.DELAYED_PAYMENT_TYPE_CODE as DELAYED2_0_ from TCEO_PAYMENT_DETAIL payments0_ where payments0_.PRODUCT_ID=?
Hibernate: select payments0_.PRODUCT_ID as PRODUCT8_1_, payments0_.PAYMENT_DETAIL_ID as PAYMENT1_1_, payments0_.PAYMENT_DETAIL_ID as PAYMENT1_0_, payments0_.PAYMENT_AMT as PAYMENT3_5_0_, payments0_.CUST_REF_NUMBER as CUST4_5_0_, payments0_.PAYMENT_TSP as PAYMENT5_5_0_, payments0_.PAYMENT_DR_CR_TYPE_CODE as PAYMENT6_5_0_, payments0_.PAYMENT_CURRENT_STATUS_CODE as PAYMENT7_5_0_, payments0_.PRODUCT_ID as PRODUCT8_5_0_, payments0_.PAYMENT_ACCOUNT_ID as PAYMENT9_5_0_, payments0_.PAYMENT_TXN_REF_NUMBER as PAYMENT10_5_0_, payments0_.PAYMENT_INSTRUCTION_CODE as PAYMENT11_5_0_, payments0_.PAYMENT_METHOD_CODE as PAYMENT12_5_0_, payments0_.PAYMENT_REASON_DESC as PAYMENT13_5_0_, payments0_.PAYMENT_ORGNL_TXN_REF_NUMBER as PAYMENT14_5_0_, payments0_.DELAYED_PAYMENT_TYPE_CODE as DELAYED2_0_ from TCEO_PAYMENT_DETAIL payments0_ where payments0_.PRODUCT_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: select payments0_.PRODUCT_ID as PRODUCT8_1_, payments0_.PAYMENT_DETAIL_ID as PAYMENT1_1_, payments0_.PAYMENT_DETAIL_ID as PAYMENT1_0_, payments0_.PAYMENT_AMT as PAYMENT3_5_0_, payments0_.CUST_REF_NUMBER as CUST4_5_0_, payments0_.PAYMENT_TSP as PAYMENT5_5_0_, payments0_.PAYMENT_DR_CR_TYPE_CODE as PAYMENT6_5_0_, payments0_.PAYMENT_CURRENT_STATUS_CODE as PAYMENT7_5_0_, payments0_.PRODUCT_ID as PRODUCT8_5_0_, payments0_.PAYMENT_ACCOUNT_ID as PAYMENT9_5_0_, payments0_.PAYMENT_TXN_REF_NUMBER as PAYMENT10_5_0_, payments0_.PAYMENT_INSTRUCTION_CODE as PAYMENT11_5_0_, payments0_.PAYMENT_METHOD_CODE as PAYMENT12_5_0_, payments0_.PAYMENT_REASON_DESC as PAYMENT13_5_0_, payments0_.PAYMENT_ORGNL_TXN_REF_NUMBER as PAYMENT14_5_0_, payments0_.DELAYED_PAYMENT_TYPE_CODE as DELAYED2_0_ from TCEO_PAYMENT_DETAIL payments0_ where payments0_.PRODUCT_ID=?
before Hibernate.initialize
before session.close()
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: delete from TCEO_PAYMENT_DETAIL where PAYMENT_DETAIL_ID=?
Hibernate: select history0_.PRODUCT_ID as PRODUCT2_1_, history0_.PRODUCT_STATUS_HIST_ID as PRODUCT1_1_, history0_.PRODUCT_STATUS_HIST_ID as PRODUCT1_0_, history0_.PRODUCT_ID as PRODUCT2_1_0_, history0_.PROCESS_TSP as PROCESS3_1_0_, history0_.PROCESS_TYPE_CODE as PROCESS4_1_0_, history0_.PRODUCT_STATUS_CODE as PRODUCT5_1_0_, history0_.PRODUCT_STATUS_TEXT as PRODUCT6_1_0_ from TCEO_PRODUCT_STATUS_HIST history0_ where history0_.PRODUCT_ID=?
Hibernate: delete from TCEO_PRODUCT_STATUS_HIST where PRODUCT_STATUS_HIST_ID=?
Hibernate: delete from TCEO_DELAYED_PAYMENT_PRODUCT where PRODUCT_ID=?
Hibernate: select history0_.PRODUCT_ID as PRODUCT2_1_, history0_.PRODUCT_STATUS_HIST_ID as PRODUCT1_1_, history0_.PRODUCT_STATUS_HIST_ID as PRODUCT1_0_, history0_.PRODUCT_ID as PRODUCT2_1_0_, history0_.PROCESS_TSP as PROCESS3_1_0_, history0_.PROCESS_TYPE_CODE as PROCESS4_1_0_, history0_.PRODUCT_STATUS_CODE as PRODUCT5_1_0_, history0_.PRODUCT_STATUS_TEXT as PRODUCT6_1_0_ from TCEO_PRODUCT_STATUS_HIST history0_ where history0_.PRODUCT_ID=?
Hibernate: delete from TCEO_PRODUCT_STATUS_HIST where PRODUCT_STATUS_HIST_ID=?
Hibernate: delete from TCEO_DELAYED_PAYMENT_PRODUCT where PRODUCT_ID=?
Hibernate: delete from TCEO_DELAYED_PAYMENT_PRODUCT where PRODUCT_ID=?
Hibernate: delete from TCEO_DELAYED_PAYMENT_PRODUCT where PRODUCT_ID=?


Top
 Profile  
 
 Post subject:
PostPosted: Tue Dec 06, 2005 4:13 am 
Expert
Expert

Joined: Tue Dec 07, 2004 6:57 am
Posts: 285
Location: Nürnberg, Germany
What is Hibernate.initialize()? I think this is the place where your data might get lost.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.