-->
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.  [ 1 post ] 
Author Message
 Post subject: cascade delete not working in one to one
PostPosted: Thu Feb 23, 2006 9:36 am 
Newbie

Joined: Sat Apr 23, 2005 6:06 pm
Posts: 6
I have the following two mapping files:

attached below:


I have implemented a one to one relationship between these two entites. The post relationship is a many to one relationship and is unidirectional where as the one to one is a bidirectional relationship.

The problem I am having is that I have set cascade="all" in this mapping:

<one-to-one name="postBenefits"
class="com..hibernate.PostBenefits"
property-ref="benefitId" cascade="all"/>

but when I delete a record in the EmpBenefitDefFile the corresponding record in the PostBenefits table does not get deleted.

I thought cacade all would have done this becuase it does something very similar for the systemBenefit field of the EmpBenefitDefFile.
In this instance deleting a record also deletes the coorect record in the system benefits table.

The log shows the delete of the EmpBenefitDefFile but no delete of the PostBenefits. It is as though the cascade is not being picked up.

There is an exception in the log about mssql database context but this does not affect anything with hibernate as i have had other queries working fine.

All help is appreciated

Hibernate version: 2.1

Mapping documents:
<?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="com..hibernate.PostBenefits"
table="D2705M">

<id name="postBenfitsRef" column="POST_BEN_REF">
<generator class="assigned"/>
</id>

<many-to-one name="benefitId"
class="com..hibernate.EmpBenefitDefFile"
column="BENEFIT_ID" unique="true" />

<many-to-one name="post"
class="com...hibernate.Post"
column="POST_REF"/>

</class>
</hibernate-mapping>


and

<?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="com..hibernate.EmpBenefitDefFile"
table="D2703M">

<id name="benefitId" column="BENEFIT_ID">
<generator class="assigned"/>
</id>

<property name="benefitShortDesc" column="BENEFIT_SHORT_DESC"/>
<property name="benefitLongDesc" column="BENEFIT_LONG_DESC"/>
<property name="benefitTxt" column="BENEFIT_DSP_TEXT"/>
<property name="benefitInputType" column="BENEFIT_INPUT_TYPE" />
<property name="benefitInputCode" column="BENEFIT_INPUT_CODE" />
<property name="benefitRangeFlag" column="BENEFIT_RANGE_FLAG"/>
<property name="benefitObsoleteDate" column="BENEFIT_OBSOLETE_DATE" type="date"/>

<one-to-one name="systemBenefit"
class="com..hibernate.SystemBenefits"
property-ref="benefitId" cascade="all"/>

<one-to-one name="postBenefits"
class="com..hibernate.PostBenefits"
property-ref="benefitId" cascade="all"/>


</class>
</hibernate-mapping>

Code between sessionFactory.openSession() and session.close():
EmpBenefitDefFile benFile = createEmpBenefitsFile();
Post post = createPost();
HibernateUtils.getInstance().getHibernateSession();
HibernateUtils.getInstance().beginTransaction();
HibernateUtils.getInstance().getHibernateSession().save(benFile);
HibernateUtils.getInstance().getHibernateSession().save(post);
HibernateUtils.getInstance().commitTransaction();

PostBenefits postFile = new PostBenefits();
postFile.setBenefitId(benFile);
postFile.setPost(post);
postFile.setPostBenfitsRef("postF1");

HibernateUtils.getInstance().beginTransaction();
HibernateUtils.getInstance().getHibernateSession().save(postFile);
HibernateUtils.getInstance().commitTransaction();
PostBenefits postBen = (PostBenefits)HibernateUtils.getInstance().getHibernateSession().
load(PostBenefits.class, postFile.getPrimaryKey());
assertEquals(post.getPrimaryKey(), postBen.getPost().getPrimaryKey());
assertEquals(benFile.getPrimaryKey(), postBen.getBenefitId().getPrimaryKey());
assertEquals(postFile.getPrimaryKey(), postBen.getPrimaryKey());

//clear the seesion of all objects:
//HibernateUtils.getInstance().getHibernateSession().clear();
//delete
HibernateUtils.getInstance().beginTransaction();
//HibernateUtils.getInstance().getHibernateSession().delete(postFile);
HibernateUtils.getInstance().getHibernateSession().delete(benFile);
HibernateUtils.getInstance().commitTransaction();


HibernateUtils.getInstance().closeHibernateSession();
Full stack trace of any exception that occurs:

Name and version of the database you are using:
MSSQL Version 8

The generated SQL (show_sql=true):

Debug level Hibernate log excerpt:
13:21:23,521 DEBUG Cascades:506 - done processing cascades for: com..hibernate.EmpBenefitDefFile
13:21:23,521 DEBUG JDBCTransaction:59 - commit
13:21:23,537 DEBUG SessionImpl:2267 - flushing session
13:21:23,537 DEBUG SessionImpl:2467 - Flushing entities and processing referenced collections
13:21:23,537 DEBUG SessionImpl:2808 - Processing unreferenced collections
13:21:23,537 DEBUG SessionImpl:2822 - Scheduling collection removes/(re)creates/updates
13:21:23,537 DEBUG SessionImpl:2291 - Flushed: 0 insertions, 0 updates, 1 deletions to 3 objects
13:21:23,537 DEBUG SessionImpl:2296 - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
13:21:23,553 DEBUG Printer:75 - listing entities:
13:21:23,553 DEBUG Printer:82 - com..hibernate.EmpBenefitDefFile{postBenefits=null, benefitObsoleteDate=23 February 2006, benefitLongDesc=longdesc, benefitInputType=Type, benefitInputCode=Input, benefitShortDesc=short, benefitId=Test1, systemBenefit=null, benefitTxt=random, benefitRangeFlag=Y}
13:21:23,553 DEBUG Printer:82 - com.hibernate.Post{defaultFormID=default, longDesc=desc, postRef=post001, jobRef=jobRef, number=number}
13:21:23,553 DEBUG Printer:82 - com..hibernate.PostBenefits{postBenfitsRef=postF1, benefitId=EmpBenefitDefFile#Test1, post=Post#post001}
13:21:23,553 DEBUG SessionImpl:2380 - executing flush
13:21:23,553 DEBUG EntityPersister:552 - Deleting entity: [com..hibernate.EmpBenefitDefFile#Test1]
13:21:23,553 DEBUG BatcherImpl:204 - about to open: 0 open PreparedStatements, 0 open ResultSets
13:21:23,553 DEBUG SQL:230 - delete from D2703M where BENEFIT_ID=?
Hibernate: delete from D2703M where BENEFIT_ID=?
13:21:23,553 DEBUG BatcherImpl:253 - preparing statement
13:21:23,553 DEBUG StringType:46 - binding 'Test1' to parameter: 1
13:21:23,553 DEBUG BatcherImpl:211 - done closing: 0 open PreparedStatements, 0 open ResultSets
13:21:23,553 DEBUG BatcherImpl:275 - closing statement
13:21:23,553 DEBUG SessionImpl:2852 - post flush
13:21:23,568 DEBUG SessionImpl:596 - transaction completion
13:21:23,568 DEBUG SessionImpl:2267 - flushing session
13:21:23,568 DEBUG SessionImpl:2467 - Flushing entities and processing referenced collections
13:21:23,568 DEBUG SessionImpl:2808 - Processing unreferenced collections
13:21:23,568 DEBUG SessionImpl:2822 - Scheduling collection removes/(re)creates/updates
13:21:23,568 DEBUG SessionImpl:2291 - Flushed: 0 insertions, 0 updates, 0 deletions to 2 objects
13:21:23,568 DEBUG SessionImpl:2296 - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
13:21:23,568 DEBUG Printer:75 - listing entities:
13:21:23,568 DEBUG Printer:82 - com.hibernate.Post{defaultFormID=default, longDesc=desc, postRef=post001, jobRef=jobRef, number=number}
13:21:23,568 DEBUG Printer:82 - com..hibernate.PostBenefits{postBenfitsRef=postF1, benefitId=EmpBenefitDefFile#Test1, post=Post#post001}
13:21:23,568 DEBUG SessionImpl:2380 - executing flush
13:21:23,568 DEBUG SessionImpl:2852 - post flush
13:21:23,568 DEBUG SessionImpl:578 - closing session
13:21:23,568 DEBUG SessionImpl:3383 - disconnecting session
13:21:23,584 DEBUG JDBCExceptionReporter:26 - SQL Warning
java.sql.SQLWarning: [AC27011]Changed database context to 'ResourceLink'.
at com.inet.tds.e.a(Unknown Source)
at com.inet.tds.e.<init>(Unknown Source)
at com.inet.tds.TdsDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at net.sf.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:101)
at net.sf.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
at net.sf.hibernate.cfg.Configuration.buildSettings(Configuration.java:1172)
at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:803)
at unitTest.WRHibernateObjectTester.<init>(WRHibernateObjectTester.java:50)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
at junit.framework.TestSuite.createTest(TestSuite.java:135)
at junit.framework.TestSuite.addTestMethod(TestSuite.java:114)
at junit.framework.TestSuite.<init>(TestSuite.java:75)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.getTest(RemoteTestRunner.java:399)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:445)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
13:21:23,584 WARN JDBCExceptionReporter:34 - SQL Warning: 5701, SQLState: 01000
13:21:23,584 WARN JDBCExceptionReporter:35 - [AC27011]Changed database context to 'ResourceLink'.
13:21:23,584 WARN JDBCExceptionReporter:34 - SQL Warning: 5703, SQLState: 01000
13:21:23,584 WARN JDBCExceptionReporter:35 - [AC27011]Changed language setting to us_english.
13:21:23,584 DEBUG DriverManagerConnectionProvider:120 - returning connection to pool, pool size: 1
13:21:23,584 DEBUG SessionImpl:596 - transaction completion


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

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.