-->
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: Hibernate doesn't cascade update
PostPosted: Wed Aug 25, 2004 1:46 pm 
Beginner
Beginner

Joined: Thu Feb 26, 2004 11:45 am
Posts: 46
I have a fairly straightforward relationship that when i create a new object and save it, only 2 out of 3 objects get perisisted. Forgive me if i've missed something, but i've gone over and over the mapping file. Mapped one object the same as the other, and it doesn't appear to work the same.

Vehicle contains one each of Title and Registration. Vehicle can have 0-1 Titles or 0-1 Registrations. Both Title and Registration cannot belong to more than one Vehicle, and cannot exist alone. Title and Registration are extended and there is an additional mapping file. Forgive me, i carved out 80% of the mapping file and other objects to recreate this. I left the simple extended classes there. Who knows, maybe it relates.

Using the suggested approach in the doc, I opted to map the Title and Registration ID such that they use the Vehicle's primary key as their primary key. I implemented Title 1st, and it worked wonderfully.

I then mapped Registration in (what i think is) the exact same way. However when i create the vehicle object and save vehicle, it saves vehicle and title but will not save the registration. You can see in the 1st trace below that Vehicle and Title are inserted. Look at the excerpt of the second trace when i specifically save Registration, and you will see that it is saved.

The code segment (which exists below as well) is:

Code:
    Session s = sf.openSession();
    Transaction tx = s.beginTransaction();
    Vehicle v = nyobj.populateVehicle();
    System.out.println("Registration references Vehicle:" + v.getRegistration().getVehicle().hashCode());
    System.out.println("Title references Vehicle:" + v.getTitle().getVehicle().hashCode());
    s.save(v);
    tx.commit();
    s.close();


If you look in the trace below you will see that both Registration and Title exist and reference vehicle. Moreover, if i add
Code:
s.save(v.getRegistration());

just before s.save() then registration is saved perfectly. It's as though the cascading attribute is not being picked up for Registration but it is for Title.

Not sure what i'm doing wrong, or if there is a problem.



Hibernate version:2.12

Mapping documents:
<hibernate-mapping default-cascade="save-update">
<class name="com.trivin.bo.vehicle.Vehicle" table="VEHICLE">
<id name="vehicleID" column="vehicleID" type="long">
<generator class="identity"/>
</id>
<property name="vin" />
<property name="year" column="modelYear" />
<one-to-one name="title" class="com.trivin.bo.vehicle.Title"/>
</class>

<class name="com.trivin.bo.vehicle.Title" table="TITLE">
<id name="titleID" column="VehicleID">
<generator class="foreign">
<param name="property">vehicle</param>
</generator>
</id>
<discriminator column="JavaSource" type="string"/>
<one-to-one name="vehicle"
class="com.trivin.bo.vehicle.Vehicle"
constrained="true"
/>
<property name="titleNumber" />
</class>


<class name="com.trivin.bo.vehicle.Registration" table="REGISTRATION">
<id name="registrationID" column="VehicleID">
<generator class="foreign">
<param name="property">vehicle</param>
</generator>
</id>
<discriminator column="JavaSource" type="string"/>
<one-to-one name="vehicle"
class="com.trivin.bo.vehicle.Vehicle"
constrained="true"
/>
<property name="plateType" />
<property name="expirationDate" />
<property name="grossWeight" />
<property name="unladenWeight" />
</class>


</hibernate-mapping>

<hibernate-mapping default-cascade="save-update">
<subclass name="com.trivin.bo.vehicle.ny.NYTitle" extends="com.trivin.bo.vehicle.Title" discriminator-value="NYTitle" >
<property name="threeOfName"/>
<property name="exemptFromTitlePlate"/>
</subclass>
<subclass name="com.trivin.bo.vehicle.ny.NYRegistration" extends="com.trivin.bo.vehicle.Registration" discriminator-value="NYRegistration" >
<property name="tempRegIssuedBy"/>
<property name="PIDDealerNumber"/>
</subclass>
</hibernate-mapping>



Code between sessionFactory.openSession() and session.close():
Code:
    Session s = sf.openSession();
    Transaction tx = s.beginTransaction();
    Vehicle v = nyobj.populateVehicle();
    System.out.println("Registration references Vehicle:" + v.getRegistration().getVehicle().hashCode());
    System.out.println("Title references Vehicle:" + v.getTitle().getVehicle().hashCode());
    s.save(v);
    tx.commit();
    s.close();


Full stack trace of any exception that occurs:

Name and version of the database you are using:
MS SQL 2000

Debug level Hibernate log excerpt:

log4j.rootLogger=warn, stdout
log4j.logger.net.sf.hibernate=debug

### log just the SQL
#log4j.logger.net.sf.hibernate.SQL=debug

### log JDBC bind parameters ###
log4j.logger.net.sf.hibernate.type=debug

Trace output:
13:30:54,860 INFO Environment:462 - Hibernate 2.1.2

13:30:54,890 INFO Environment:496 - loaded properties from resource hibernate.properties: {hibernate.connection.driver_class=org.hsqldb.jdbcDriver, hibernate.cglib.use_reflection_optimizer=true, hibernate.cache.provider_class=net.sf.hibernate.cache.HashtableCacheProvider, hibernate.cache.use_query_cache=true, hibernate.max_fetch_depth=1, hibernate.dialect=net.sf.hibernate.dialect.SQLServerDialect, hibernate.jdbc.use_streams_for_binary=true, hibernate.jdbc.batch_size=0, hibernate.query.substitutions=true 1, false 0, yes 'Y', no 'N', hibernate.proxool.pool_alias=pool1, hibernate.connection.username=sa, hibernate.connection.url=jdbc:hsqldb:., hibernate.connection.password=jeffall, hibernate.connection.pool_size=3}

13:30:54,900 INFO Environment:518 - using java.io streams to persist binary types

13:30:54,900 INFO Environment:519 - using CGLIB reflection optimizer

13:30:54,910 INFO Configuration:854 - configuring from resource: /hibernate.cfg.xml

13:30:54,910 INFO Configuration:826 - Configuration resource: /hibernate.cfg.xml

13:30:55,110 INFO Configuration:311 - Mapping resource: ertbo-1.0-hibernate.xml

13:30:55,311 INFO Binder:229 - Mapping class: com.trivin.bo.vehicle.Vehicle -> VEHICLE

13:30:55,521 INFO Binder:229 - Mapping class: com.trivin.bo.vehicle.Title -> TITLE

13:30:55,531 INFO Binder:229 - Mapping class: com.trivin.bo.vehicle.Registration -> REGISTRATION

13:30:55,551 INFO Configuration:311 - Mapping resource: nyertbo-1.0-hibernate.xml

13:30:55,681 INFO Binder:169 - Mapping subclass: com.trivin.bo.vehicle.ny.NYTitle -> TITLE

13:30:55,681 INFO Binder:169 - Mapping subclass: com.trivin.bo.vehicle.ny.NYRegistration -> REGISTRATION

13:30:55,691 INFO Configuration:1017 - Configured SessionFactory: null

13:30:55,691 INFO Configuration:595 - processing one-to-many association mappings

13:30:55,691 INFO Configuration:604 - processing one-to-one association property references

13:30:55,691 INFO Configuration:629 - processing foreign key constraints

13:30:55,711 INFO Dialect:82 - Using dialect: net.sf.hibernate.dialect.SQLServerDialect

13:30:55,721 INFO SettingsFactory:58 - Maximim outer join fetch depth: 1

13:30:55,721 INFO SettingsFactory:62 - Use outer join fetching: true

13:30:55,721 INFO DriverManagerConnectionProvider:41 - Using Hibernate built-in connection pool (not for production use!)

13:30:55,721 INFO DriverManagerConnectionProvider:42 - Hibernate connection pool size: 3

13:30:55,741 INFO DriverManagerConnectionProvider:71 - using driver: com.microsoft.jdbc.sqlserver.SQLServerDriver at URL: jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=Cursor;DatabaseName=ertbo

13:30:55,741 INFO DriverManagerConnectionProvider:72 - connection properties: {user=sa, password=jeffall}

13:30:55,751 INFO TransactionFactoryFactory:31 - Transaction strategy: net.sf.hibernate.transaction.JDBCTransactionFactory

13:30:55,751 INFO TransactionManagerLookupFactory:33 - No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)

13:30:56,012 INFO SettingsFactory:102 - Use scrollable result sets: true

13:30:56,012 INFO SettingsFactory:105 - Use JDBC3 getGeneratedKeys(): false

13:30:56,012 INFO SettingsFactory:108 - Optimize cache for minimal puts: false

13:30:56,012 INFO SettingsFactory:114 - echoing all SQL to stdout

13:30:56,012 INFO SettingsFactory:117 - Query language substitutions: {no='N', true=1, yes='Y', false=0}

13:30:56,012 INFO SettingsFactory:128 - cache provider: net.sf.hibernate.cache.HashtableCacheProvider

13:30:56,062 INFO Configuration:1080 - instantiating and configuring caches

13:30:56,232 INFO SessionFactoryImpl:119 - building session factory

13:30:56,663 INFO ReflectHelper:160 - reflection optimizer disabled for: com.trivin.bo.vehicle.Vehicle, NullPointerException: null

13:30:56,943 INFO SessionFactoryObjectFactory:82 - no JNDI name configured

13:30:56,963 INFO Dialect:82 - Using dialect: net.sf.hibernate.dialect.SQLServerDialect

13:30:56,963 INFO DriverManagerConnectionProvider:41 - Using Hibernate built-in connection pool (not for production use!)

13:30:56,963 INFO DriverManagerConnectionProvider:42 - Hibernate connection pool size: 3

13:30:56,963 INFO DriverManagerConnectionProvider:71 - using driver: com.microsoft.jdbc.sqlserver.SQLServerDriver at URL: jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=Cursor;DatabaseName=ertbo

13:30:56,983 INFO DriverManagerConnectionProvider:72 - connection properties: {user=sa, password=jeffall}

13:30:56,983 INFO SchemaUpdate:102 - Running hbm2ddl schema update

13:30:56,983 INFO SchemaUpdate:110 - fetching database metadata

13:30:57,063 INFO SchemaUpdate:124 - updating schema

13:30:57,063 INFO Configuration:595 - processing one-to-many association mappings

13:30:57,063 INFO Configuration:604 - processing one-to-one association property references

13:30:57,063 INFO Configuration:629 - processing foreign key constraints

13:30:57,564 INFO SchemaUpdate:143 - schema update complete

13:30:57,564 INFO DriverManagerConnectionProvider:137 - cleaning up connection pool: jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=Cursor;DatabaseName=ertbo

13:30:57,574 INFO UpdateTimestampsCache:35 - starting update timestamps cache at region: net.sf.hibernate.cache.UpdateTimestampsCache

13:30:57,574 INFO QueryCache:39 - starting query cache at region: net.sf.hibernate.cache.QueryCache

Finished Initializing Hibernate

Aug 25, 2004 1:30:57 PM com.trivin.bo.BOFactory <clinit>

WARNING: Unable to Load Factory:com.trivin.bo.ct.CTBOFactory

Registration references Vehicle:3551336

Title references Vehicle:3551336

Hibernate: insert into VEHICLE (vin, modelYear) values (?, ?) select SCOPE_IDENTITY()

Hibernate: insert into TITLE (threeOfName, exemptFromTitlePlate, titleNumber, JavaSource, VehicleID) values (?, ?, ?, 'NYTitle', ?)

[/code]

below is the trace when i specifically save the registration object within Vehicle

Code:
13:40:50,207  INFO Environment:462 - Hibernate 2.1.2

13:40:50,237  INFO Environment:496 - loaded properties from resource hibernate.properties: {hibernate.connection.driver_class=org.hsqldb.jdbcDriver, hibernate.cglib.use_reflection_optimizer=true, hibernate.cache.provider_class=net.sf.hibernate.cache.HashtableCacheProvider, hibernate.cache.use_query_cache=true, hibernate.max_fetch_depth=1, hibernate.dialect=net.sf.hibernate.dialect.SQLServerDialect, hibernate.jdbc.use_streams_for_binary=true, hibernate.jdbc.batch_size=0, hibernate.query.substitutions=true 1, false 0, yes 'Y', no 'N', hibernate.proxool.pool_alias=pool1, hibernate.connection.username=sa, hibernate.connection.url=jdbc:hsqldb:., hibernate.connection.password=jeffall, hibernate.connection.pool_size=3}

13:40:50,287  INFO Environment:518 - using java.io streams to persist binary types

13:40:50,287  INFO Environment:519 - using CGLIB reflection optimizer

13:40:50,297  INFO Configuration:854 - configuring from resource: /hibernate.cfg.xml

13:40:50,297  INFO Configuration:826 - Configuration resource: /hibernate.cfg.xml

13:40:50,487  INFO Configuration:311 - Mapping resource: ertbo-1.0-hibernate.xml

13:40:50,798  INFO Binder:229 - Mapping class: com.trivin.bo.vehicle.Vehicle -> VEHICLE

13:40:50,998  INFO Binder:229 - Mapping class: com.trivin.bo.vehicle.Title -> TITLE

13:40:51,018  INFO Binder:229 - Mapping class: com.trivin.bo.vehicle.Registration -> REGISTRATION

13:40:51,038  INFO Configuration:311 - Mapping resource: nyertbo-1.0-hibernate.xml

13:40:51,158  INFO Binder:169 - Mapping subclass: com.trivin.bo.vehicle.ny.NYTitle -> TITLE

13:40:51,168  INFO Binder:169 - Mapping subclass: com.trivin.bo.vehicle.ny.NYRegistration -> REGISTRATION

13:40:51,168  INFO Configuration:1017 - Configured SessionFactory: null

13:40:51,168  INFO Configuration:595 - processing one-to-many association mappings

13:40:51,168  INFO Configuration:604 - processing one-to-one association property references

13:40:51,168  INFO Configuration:629 - processing foreign key constraints

13:40:51,198  INFO Dialect:82 - Using dialect: net.sf.hibernate.dialect.SQLServerDialect

13:40:51,198  INFO SettingsFactory:58 - Maximim outer join fetch depth: 1

13:40:51,198  INFO SettingsFactory:62 - Use outer join fetching: true

13:40:51,208  INFO DriverManagerConnectionProvider:41 - Using Hibernate built-in connection pool (not for production use!)

13:40:51,208  INFO DriverManagerConnectionProvider:42 - Hibernate connection pool size: 3

13:40:51,228  INFO DriverManagerConnectionProvider:71 - using driver: com.microsoft.jdbc.sqlserver.SQLServerDriver at URL: jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=Cursor;DatabaseName=ertbo

13:40:51,228  INFO DriverManagerConnectionProvider:72 - connection properties: {user=sa, password=jeffall}

13:40:51,228  INFO TransactionFactoryFactory:31 - Transaction strategy: net.sf.hibernate.transaction.JDBCTransactionFactory

13:40:51,228  INFO TransactionManagerLookupFactory:33 - No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)

13:40:51,478  INFO SettingsFactory:102 - Use scrollable result sets: true

13:40:51,478  INFO SettingsFactory:105 - Use JDBC3 getGeneratedKeys(): false

13:40:51,478  INFO SettingsFactory:108 - Optimize cache for minimal puts: false

13:40:51,478  INFO SettingsFactory:114 - echoing all SQL to stdout

13:40:51,478  INFO SettingsFactory:117 - Query language substitutions: {no='N', true=1, yes='Y', false=0}

13:40:51,478  INFO SettingsFactory:128 - cache provider: net.sf.hibernate.cache.HashtableCacheProvider

13:40:51,528  INFO Configuration:1080 - instantiating and configuring caches

13:40:51,699  INFO SessionFactoryImpl:119 - building session factory

13:40:52,109  INFO ReflectHelper:160 - reflection optimizer disabled for: com.trivin.bo.vehicle.Vehicle, NullPointerException: null

13:40:52,369  INFO SessionFactoryObjectFactory:82 - no JNDI name configured

13:40:52,389  INFO Dialect:82 - Using dialect: net.sf.hibernate.dialect.SQLServerDialect

13:40:52,399  INFO DriverManagerConnectionProvider:41 - Using Hibernate built-in connection pool (not for production use!)

13:40:52,399  INFO DriverManagerConnectionProvider:42 - Hibernate connection pool size: 3

13:40:52,399  INFO DriverManagerConnectionProvider:71 - using driver: com.microsoft.jdbc.sqlserver.SQLServerDriver at URL: jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=Cursor;DatabaseName=ertbo

13:40:52,399  INFO DriverManagerConnectionProvider:72 - connection properties: {user=sa, password=jeffall}

13:40:52,399  INFO SchemaUpdate:102 - Running hbm2ddl schema update

13:40:52,399  INFO SchemaUpdate:110 - fetching database metadata

13:40:52,459  INFO SchemaUpdate:124 - updating schema

13:40:52,459  INFO Configuration:595 - processing one-to-many association mappings

13:40:52,459  INFO Configuration:604 - processing one-to-one association property references

13:40:52,459  INFO Configuration:629 - processing foreign key constraints

13:40:52,910  INFO SchemaUpdate:143 - schema update complete

13:40:52,910  INFO DriverManagerConnectionProvider:137 - cleaning up connection pool: jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=Cursor;DatabaseName=ertbo

13:40:52,910  INFO UpdateTimestampsCache:35 - starting update timestamps cache at region: net.sf.hibernate.cache.UpdateTimestampsCache

13:40:52,920  INFO QueryCache:39 - starting query cache at region: net.sf.hibernate.cache.QueryCache

Finished Initializing Hibernate

Aug 25, 2004 1:40:53 PM com.trivin.bo.BOFactory <clinit>

WARNING: Unable to Load Factory:com.trivin.bo.ct.CTBOFactory

Registration references Vehicle:3551336

Title references Vehicle:3551336

Hibernate: insert into VEHICLE (vin, modelYear) values (?, ?) select SCOPE_IDENTITY()

Hibernate: insert into TITLE (threeOfName, exemptFromTitlePlate, titleNumber, JavaSource, VehicleID) values (?, ?, ?, 'NYTitle', ?)

Hibernate: insert into REGISTRATION (tempRegIssuedBy, PIDDealerNumber, plateType, expirationDate, grossWeight, unladenWeight, JavaSource, VehicleID) values (?, ?, ?, ?, ?, ?, 'NYRegistration', ?)



Top
 Profile  
 
 Post subject: Found what was missing
PostPosted: Wed Aug 25, 2004 5:21 pm 
Beginner
Beginner

Joined: Thu Feb 26, 2004 11:45 am
Posts: 46
Please don't bother (had you intended) to review this post. I found that while i had the mapping from Registration to Vehicle, i was missing the mapping from vehicle to Registration.

sorry for any time anybody may have spent inspecting this.

and thanks


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.