Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
Hibernate version: 3.0
Mapping documents:
Code:
<?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="com.tessco.filteradmin.pojo.Application" lazy="false" table="SLTN_APPLICATION">
<id name="id" column="ID">
<generator class="sequence">
<param name="sequence">application_seq</param>
</generator>
</id>
<property name="solutionId" column="SOLUTION_ID" insert="false" update="false" type="integer"/>
<property name="name" column="NAME" type="string"/>
<property name="displayName" column="DISPLAY_NAME" type="string"/>
<property name="shortDescription" column="SHORT_DESCRIPTION" type="string"/>
<property name="longDescription" column="LONG_DESCRIPTION" type="string"/>
<property name="imageUrl" column="IMAGE_URL" type="string"/>
<property name="drawingUrl" column="DRAWING_URL" type="string"/>
<property name="sequenceNum" column="SEQ_NUM" not-null="false" type="java.lang.Integer"/>
<property name="active" column="ACTIVE" not-null="false" type="java.lang.Integer"/>
<property name="modifiedOn" column="LAST_MDFY_TS" type="java.sql.Timestamp" />
<property name="createdOn" column="CREATED_TS" type="java.sql.Timestamp" />
<property name="lastUserId" column="LAST_USER_ID" type="string" />
<property name="lastProgramId" column="LAST_PGM_ID" type="string" />
<many-to-one
name="solution"
class="com.tessco.filteradmin.pojo.Solution"
column="SOLUTION_ID"
update="true"
not-null="true"
lazy="false" />
<bag name="products" inverse="true" cascade="all-delete-orphan" lazy="false" order-by="SKU">
<key column="APPLICATION_ID" />
<one-to-many class="com.tessco.filteradmin.pojo.Product"/>
</bag>
</class>
</hibernate-mapping>
Code:
<?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="com.tessco.filteradmin.pojo.Product" lazy="false" table="SLTN_APP_PRODUCT">
<composite-id name="id" class="com.tessco.filteradmin.pojo.SkuApplicationPair">
<key-property name="sku" type="string" column="SKU"/>
<key-property name="applicationId" type="integer" column="APPLICATION_ID"/>
</composite-id>
<property name="displayLevel" column="DISPLAY_LEVEL" type="string"/>
<property name="sequenceNum" column="SEQ_NUM" not-null="false" type="java.lang.Integer"/>
<property name="active" column="ACTIVE" not-null="false" type="java.lang.Integer"/>
<property name="modifiedOn" column="LAST_MDFY_TS" type="java.sql.Timestamp" />
<property name="createdOn" column="CREATED_TS" type="java.sql.Timestamp" />
<property name="lastUserId" column="LAST_USER_ID" type="string" />
<property name="lastProgramId" column="LAST_PGM_ID" type="string" />
<many-to-one
name="application"
class="com.tessco.filteradmin.pojo.Application"
column="APPLICATION_ID"
update="false"
insert="false"
not-null="true"
lazy="false" />
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():Code:
session = HibernateUtil.getProductMaintSessionFactory( ).getCurrentSession( );
tx = session.beginTransaction( );
// timestamp for audit fields
Timestamp ts = new Timestamp( System.currentTimeMillis( ) );
SkuApplicationPair sap = new SkuApplicationPair( );
sap.setApplicationId( appId );
sap.setSku( sku );
product = (Product) session.load( Product.class, sap );
Product prodToMove = (Product) session.load( Product.class, moveSAP );
app = (Application) session.load( Application.class, appId );
System.out.println( "---- PRODUCTS SORTED BY SEQ NUM" );
Product a = (Product) app.getProducts( ).get( product.getSequenceNum( ).intValue( ) - 1 );
Product b = (Product) app.getProducts( ).get( prodToMove.getSequenceNum( ).intValue( ) - 1 );
System.out.println( "---- PRODUCTS LOADED" );
Integer switchSeq = b.getSequenceNum( );
b.setSequenceNum( a.getSequenceNum( ) );
a.setSequenceNum( switchSeq );
System.out.println( "---- SEQ NUM" );
app.getProducts( ).remove( product );
app.getProducts( ).remove( prodToMove );
session.save( app );
session.flush( );
a.setModifiedOn( ts );
b.setModifiedOn( ts );
System.out.println( "---- MODIFIED TS" );
app.getProducts( ).add( a );
app.getProducts( ).add( b );
session.save( app );
session.save( a );
session.save( b );
System.out.println( "---- SAVE" );
tx.commit( );
System.out.println( "---- COMMITTED" );
Full stack trace of any exception that occurs:None, the application hangs at the commit at the end.
Name and version of the database you are using:Oracle 9i
The generated SQL (show_sql=true):Code:
Hibernate: select product0_.SKU as SKU113_, product0_.APPLICATION_ID as APPLICAT2_113_, product0_.DI
SPLAY_LEVEL as DISPLAY3_113_, product0_.SEQ_NUM as SEQ4_113_, product0_.ACTIVE as ACTIVE113_, produc
t0_.LAST_MDFY_TS as LAST6_113_, product0_.CREATED_TS as CREATED7_113_, product0_.LAST_USER_ID as LAS
T8_113_, product0_.LAST_PGM_ID as LAST9_113_ from SLTN_APP_PRODUCT product0_ where (APPLICATION_ID=?
)
Hibernate: select applicatio0_.ID as ID112_1_, applicatio0_.SOLUTION_ID as SOLUTION2_112_1_, applica
tio0_.NAME as NAME112_1_, applicatio0_.DISPLAY_NAME as DISPLAY4_112_1_, applicatio0_.SHORT_DESCRIPTI
ON as SHORT5_112_1_, applicatio0_.LONG_DESCRIPTION as LONG6_112_1_, applicatio0_.IMAGE_URL as IMAGE7
_112_1_, applicatio0_.DRAWING_URL as DRAWING8_112_1_, applicatio0_.SEQ_NUM as SEQ9_112_1_, applicati
o0_.ACTIVE as ACTIVE112_1_, applicatio0_.LAST_MDFY_TS as LAST11_112_1_, applicatio0_.CREATED_TS as C
REATED12_112_1_, applicatio0_.LAST_USER_ID as LAST13_112_1_, applicatio0_.LAST_PGM_ID as LAST14_112_
1_, solution1_.ID as ID111_0_, solution1_.NAME as NAME111_0_, solution1_.DISPLAY_NAME as DISPLAY3_11
1_0_, solution1_.SHORT_DESCRIPTION as SHORT4_111_0_, solution1_.LONG_DESCRIPTION as LONG5_111_0_, so
lution1_.IMAGE_URL as IMAGE6_111_0_, solution1_.ACTIVE as ACTIVE111_0_, solution1_.SEQ_NUM as SEQ8_1
11_0_, solution1_.LAST_MDFY_TS as LAST9_111_0_, solution1_.CREATED_TS as CREATED10_111_0_, solution1
_.LAST_USER_ID as LAST11_111_0_, solution1_.LAST_PGM_ID as LAST12_111_0_ from SLTN_APPLICATION appli
catio0_ inner join SOLUTION solution1_ on applicatio0_.SOLUTION_ID=solution1_.ID where applicatio0_.
ID=?
Hibernate: select products0_.APPLICATION_ID as APPLICAT2_1_, products0_.SKU as SKU1_, products0_.SKU
as SKU113_0_, products0_.APPLICATION_ID as APPLICAT2_113_0_, products0_.DISPLAY_LEVEL as DISPLAY3_1
13_0_, products0_.SEQ_NUM as SEQ4_113_0_, products0_.ACTIVE as ACTIVE113_0_, products0_.LAST_MDFY_TS
as LAST6_113_0_, products0_.CREATED_TS as CREATED7_113_0_, products0_.LAST_USER_ID as LAST8_113_0_,
products0_.LAST_PGM_ID as LAST9_113_0_ from SLTN_APP_PRODUCT products0_ where products0_.APPLICATIO
N_ID=? order by products0_.SKU
Hibernate: select applicatio0_.SOLUTION_ID as SOLUTION2_1_, applicatio0_.ID as ID1_, applicatio0_.ID
as ID112_0_, applicatio0_.SOLUTION_ID as SOLUTION2_112_0_, applicatio0_.NAME as NAME112_0_, applica
tio0_.DISPLAY_NAME as DISPLAY4_112_0_, applicatio0_.SHORT_DESCRIPTION as SHORT5_112_0_, applicatio0_
.LONG_DESCRIPTION as LONG6_112_0_, applicatio0_.IMAGE_URL as IMAGE7_112_0_, applicatio0_.DRAWING_URL
as DRAWING8_112_0_, applicatio0_.SEQ_NUM as SEQ9_112_0_, applicatio0_.ACTIVE as ACTIVE112_0_, appli
catio0_.LAST_MDFY_TS as LAST11_112_0_, applicatio0_.CREATED_TS as CREATED12_112_0_, applicatio0_.LAS
T_USER_ID as LAST13_112_0_, applicatio0_.LAST_PGM_ID as LAST14_112_0_ from SLTN_APPLICATION applicat
io0_ where applicatio0_.SOLUTION_ID=? order by applicatio0_.ID
Hibernate: select product0_.SKU as SKU113_, product0_.APPLICATION_ID as APPLICAT2_113_, product0_.DI
SPLAY_LEVEL as DISPLAY3_113_, product0_.SEQ_NUM as SEQ4_113_, product0_.ACTIVE as ACTIVE113_, produc
t0_.LAST_MDFY_TS as LAST6_113_, product0_.CREATED_TS as CREATED7_113_, product0_.LAST_USER_ID as LAS
T8_113_, product0_.LAST_PGM_ID as LAST9_113_ from SLTN_APP_PRODUCT product0_ where (APPLICATION_ID=?
)
Hibernate: select applicatio0_.ID as ID112_1_, applicatio0_.SOLUTION_ID as SOLUTION2_112_1_, applica
tio0_.NAME as NAME112_1_, applicatio0_.DISPLAY_NAME as DISPLAY4_112_1_, applicatio0_.SHORT_DESCRIPTI
ON as SHORT5_112_1_, applicatio0_.LONG_DESCRIPTION as LONG6_112_1_, applicatio0_.IMAGE_URL as IMAGE7
_112_1_, applicatio0_.DRAWING_URL as DRAWING8_112_1_, applicatio0_.SEQ_NUM as SEQ9_112_1_, applicati
o0_.ACTIVE as ACTIVE112_1_, applicatio0_.LAST_MDFY_TS as LAST11_112_1_, applicatio0_.CREATED_TS as C
REATED12_112_1_, applicatio0_.LAST_USER_ID as LAST13_112_1_, applicatio0_.LAST_PGM_ID as LAST14_112_
1_, solution1_.ID as ID111_0_, solution1_.NAME as NAME111_0_, solution1_.DISPLAY_NAME as DISPLAY3_11
1_0_, solution1_.SHORT_DESCRIPTION as SHORT4_111_0_, solution1_.LONG_DESCRIPTION as LONG5_111_0_, so
lution1_.IMAGE_URL as IMAGE6_111_0_, solution1_.ACTIVE as ACTIVE111_0_, solution1_.SEQ_NUM as SEQ8_1
11_0_, solution1_.LAST_MDFY_TS as LAST9_111_0_, solution1_.CREATED_TS as CREATED10_111_0_, solution1
_.LAST_USER_ID as LAST11_111_0_, solution1_.LAST_PGM_ID as LAST12_111_0_ from SLTN_APPLICATION appli
catio0_ inner join SOLUTION solution1_ on applicatio0_.SOLUTION_ID=solution1_.ID where applicatio0_.
ID=?
Hibernate: select products0_.APPLICATION_ID as APPLICAT2_1_, products0_.SKU as SKU1_, products0_.SKU
as SKU113_0_, products0_.APPLICATION_ID as APPLICAT2_113_0_, products0_.DISPLAY_LEVEL as DISPLAY3_1
13_0_, products0_.SEQ_NUM as SEQ4_113_0_, products0_.ACTIVE as ACTIVE113_0_, products0_.LAST_MDFY_TS
as LAST6_113_0_, products0_.CREATED_TS as CREATED7_113_0_, products0_.LAST_USER_ID as LAST8_113_0_,
products0_.LAST_PGM_ID as LAST9_113_0_ from SLTN_APP_PRODUCT products0_ where products0_.APPLICATIO
N_ID=? order by products0_.SKU
Hibernate: select applicatio0_.SOLUTION_ID as SOLUTION2_1_, applicatio0_.ID as ID1_, applicatio0_.ID
as ID112_0_, applicatio0_.SOLUTION_ID as SOLUTION2_112_0_, applicatio0_.NAME as NAME112_0_, applica
tio0_.DISPLAY_NAME as DISPLAY4_112_0_, applicatio0_.SHORT_DESCRIPTION as SHORT5_112_0_, applicatio0_
.LONG_DESCRIPTION as LONG6_112_0_, applicatio0_.IMAGE_URL as IMAGE7_112_0_, applicatio0_.DRAWING_URL
as DRAWING8_112_0_, applicatio0_.SEQ_NUM as SEQ9_112_0_, applicatio0_.ACTIVE as ACTIVE112_0_, appli
catio0_.LAST_MDFY_TS as LAST11_112_0_, applicatio0_.CREATED_TS as CREATED12_112_0_, applicatio0_.LAS
T_USER_ID as LAST13_112_0_, applicatio0_.LAST_PGM_ID as LAST14_112_0_ from SLTN_APPLICATION applicat
io0_ where applicatio0_.SOLUTION_ID=? order by applicatio0_.ID
---- SEQ NUM TO MOVE: 2
---- UP
---- MATCH: 123456
---- SAP: 123456
Hibernate: select product0_.SKU as SKU113_2_, product0_.APPLICATION_ID as APPLICAT2_113_2_, product0
_.DISPLAY_LEVEL as DISPLAY3_113_2_, product0_.SEQ_NUM as SEQ4_113_2_, product0_.ACTIVE as ACTIVE113_
2_, product0_.LAST_MDFY_TS as LAST6_113_2_, product0_.CREATED_TS as CREATED7_113_2_, product0_.LAST_
USER_ID as LAST8_113_2_, product0_.LAST_PGM_ID as LAST9_113_2_, applicatio1_.ID as ID112_0_, applica
tio1_.SOLUTION_ID as SOLUTION2_112_0_, applicatio1_.NAME as NAME112_0_, applicatio1_.DISPLAY_NAME as
DISPLAY4_112_0_, applicatio1_.SHORT_DESCRIPTION as SHORT5_112_0_, applicatio1_.LONG_DESCRIPTION as
LONG6_112_0_, applicatio1_.IMAGE_URL as IMAGE7_112_0_, applicatio1_.DRAWING_URL as DRAWING8_112_0_,
applicatio1_.SEQ_NUM as SEQ9_112_0_, applicatio1_.ACTIVE as ACTIVE112_0_, applicatio1_.LAST_MDFY_TS
as LAST11_112_0_, applicatio1_.CREATED_TS as CREATED12_112_0_, applicatio1_.LAST_USER_ID as LAST13_1
12_0_, applicatio1_.LAST_PGM_ID as LAST14_112_0_, solution2_.ID as ID111_1_, solution2_.NAME as NAME
111_1_, solution2_.DISPLAY_NAME as DISPLAY3_111_1_, solution2_.SHORT_DESCRIPTION as SHORT4_111_1_, s
olution2_.LONG_DESCRIPTION as LONG5_111_1_, solution2_.IMAGE_URL as IMAGE6_111_1_, solution2_.ACTIVE
as ACTIVE111_1_, solution2_.SEQ_NUM as SEQ8_111_1_, solution2_.LAST_MDFY_TS as LAST9_111_1_, soluti
on2_.CREATED_TS as CREATED10_111_1_, solution2_.LAST_USER_ID as LAST11_111_1_, solution2_.LAST_PGM_I
D as LAST12_111_1_ from SLTN_APP_PRODUCT product0_ inner join SLTN_APPLICATION applicatio1_ on produ
ct0_.APPLICATION_ID=applicatio1_.ID left outer join SOLUTION solution2_ on applicatio1_.SOLUTION_ID=
solution2_.ID where product0_.SKU=? and product0_.APPLICATION_ID=?
Hibernate: select applicatio0_.SOLUTION_ID as SOLUTION2_1_, applicatio0_.ID as ID1_, applicatio0_.ID
as ID112_0_, applicatio0_.SOLUTION_ID as SOLUTION2_112_0_, applicatio0_.NAME as NAME112_0_, applica
tio0_.DISPLAY_NAME as DISPLAY4_112_0_, applicatio0_.SHORT_DESCRIPTION as SHORT5_112_0_, applicatio0_
.LONG_DESCRIPTION as LONG6_112_0_, applicatio0_.IMAGE_URL as IMAGE7_112_0_, applicatio0_.DRAWING_URL
as DRAWING8_112_0_, applicatio0_.SEQ_NUM as SEQ9_112_0_, applicatio0_.ACTIVE as ACTIVE112_0_, appli
catio0_.LAST_MDFY_TS as LAST11_112_0_, applicatio0_.CREATED_TS as CREATED12_112_0_, applicatio0_.LAS
T_USER_ID as LAST13_112_0_, applicatio0_.LAST_PGM_ID as LAST14_112_0_ from SLTN_APPLICATION applicat
io0_ where applicatio0_.SOLUTION_ID=? order by applicatio0_.ID
Hibernate: select products0_.APPLICATION_ID as APPLICAT2_1_, products0_.SKU as SKU1_, products0_.SKU
as SKU113_0_, products0_.APPLICATION_ID as APPLICAT2_113_0_, products0_.DISPLAY_LEVEL as DISPLAY3_1
13_0_, products0_.SEQ_NUM as SEQ4_113_0_, products0_.ACTIVE as ACTIVE113_0_, products0_.LAST_MDFY_TS
as LAST6_113_0_, products0_.CREATED_TS as CREATED7_113_0_, products0_.LAST_USER_ID as LAST8_113_0_,
products0_.LAST_PGM_ID as LAST9_113_0_ from SLTN_APP_PRODUCT products0_ where products0_.APPLICATIO
N_ID=? order by products0_.SKU
---- PRODUCTS SORTED BY SEQ NUM
---- PRODUCTS LOADED
---- SEQ NUM
Hibernate: delete from SLTN_APP_PRODUCT where SKU=? and APPLICATION_ID=?
Hibernate: delete from SLTN_APP_PRODUCT where SKU=? and APPLICATION_ID=?
I'm trying to swap the sequenceNum of two Product objects, which belong to the same Application (as shown above). Whenever I get to a commit or flush, Hibernate hangs but does not throw an exception. I have done similar code before which works, but a main difference is that this one is using a composite-id instead of a normal unique id.[/code]