value was already associated with the session: d1e22501fbd4255600fbd42559d30001, of class: test.Stock
Ok let me set the scene here, I have some simple session logic which checks to see if a session object has been created before. If it has not, an Order Object is created and an associated order item. If the session object has already been created, then further order items are created:
InsertOrder insertorder = new InsertOrder();
//1.Determine if an order has been created
Order newOrder = (Order)session.getAttribute("ORDER");
if (newOrder == null){
newOrder = new Order();
}
//2.check that stock exists
Stock newStk = InsertOrder.checkStock("d1e22501fbd4255600fbd42559d30001");
//3.Add stock item
newOrder.addProduct(newStk,1,32);
//4.Update Session object
session.setAttribute("ORDER", newOrder);
//5.Save stock item
//insertorder.newOrder(newOrder);
The problem I am having comes when I uncomment point 5, to insert the new order to the table. So effectively, as this is a test page, what I am doing is refreshing the page a few times to create an order and then some order items. i then uncomment point 5 and refresh the page again, at this point the error is generated. The debug code I am getting is:
04:33:23,379 DEBUG SessionImpl:528 - opened session
04:33:23,381 DEBUG JDBCTransaction:37 - begin
04:33:23,383 DEBUG JDBCTransaction:41 - current autocommit status:false
04:33:23,385 DEBUG SessionImpl:786 - saving [test.Order#d1e22501fbea3a9d00fbec39d139000e]
04:33:23,387 DEBUG Cascades:497 - processing cascades for: test.Order
04:33:23,389 DEBUG Cascades:506 - done processing cascades for: test.Order
04:33:23,391 DEBUG Cascades:497 - processing cascades for: test.Order
04:33:23,393 DEBUG Cascades:524 - cascading to collection: test.Order.OrderItems
04:33:23,394 DEBUG Cascades:113 - cascading to saveOrUpdate()
04:33:23,396 DEBUG SessionImpl:1321 - saveOrUpdate() unsaved instance
04:33:23,398 DEBUG SessionImpl:786 - saving [test.OrderItem#d1e22501fbea3a9d00fbec39d146000f]
04:33:23,400 DEBUG Cascades:497 - processing cascades for: test.OrderItem
04:33:23,402 DEBUG Cascades:113 - cascading to saveOrUpdate()
04:33:23,404 DEBUG Cascades:341 - id unsaved-value strategy NULL
04:33:23,406 DEBUG SessionImpl:1326 - saveOrUpdate() previously saved instance with id: d1e22501fbd4255600fbd42559d30001
04:33:23,408 DEBUG SessionImpl:1374 - updating [test.Stock#d1e22501fbd4255600fbd42559d30001]
04:33:23,410 DEBUG Cascades:497 - processing cascades for: test.Stock
04:33:23,412 DEBUG Cascades:506 - done processing cascades for: test.Stock
04:33:23,414 DEBUG Cascades:506 - done processing cascades for: test.OrderItem
04:33:23,416 DEBUG Cascades:497 - processing cascades for: test.OrderItem
04:33:23,417 DEBUG Cascades:506 - done processing cascades for: test.OrderItem
04:33:23,419 DEBUG Cascades:113 - cascading to saveOrUpdate()
04:33:23,421 DEBUG SessionImpl:1321 - saveOrUpdate() unsaved instance
04:33:23,429 DEBUG SessionImpl:786 - saving [test.OrderItem#d1e22501fbea3a9d00fbec39d1650010]
04:33:23,431 DEBUG Cascades:497 - processing cascades for: test.OrderItem
04:33:23,433 DEBUG Cascades:113 - cascading to saveOrUpdate()
04:33:23,435 DEBUG Cascades:341 - id unsaved-value strategy NULL
04:33:23,437 DEBUG SessionImpl:1326 - saveOrUpdate() previously saved instance with id: d1e22501fbd4255600fbd42559d30001
04:33:23,441 DEBUG SessionImpl:1374 - updating [test.Stock#d1e22501fbd4255600fbd42559d30001]
My Stock map is:
<class name="Stock" table="stocktbl">
<id name="ID" column="stock_id" type="string" unsaved-value="null">
<generator class="uuid.hex"/>
</id>
<property name="ArtistID" column="artist_id" type="integer" not-null="true"/>
<property name="ItemType" column="item_type" type="string" not-null="true"/>
<property name="ItemTitle" column="item_title" type="string"/>
<property name="ItemDemo" column="item_demo_location" type="string"/>
<property name="ItemFinal" column="item_final_location" type="string"/>
<property name="UnitCost" column="unit_cost" type="double"/>
<property name="ItemSelected" column="item_selected" type="boolean"/>
<property name="ItemPurchaseAmount" column="item_purchase_amount" type="integer"/>
<one-to-one name="StockImages" outer-join="false" class="StockImages" cascade="delete"/>
</class>
My Order map is:
<class name="Order" table="orderstbl">
<id name="ID" column="order_id" type="string" unsaved-value="null">
<generator class="uuid.hex"/>
</id>
<property name="OrderDate" column="order_date" type="timestamp" not-null="true"/>
<property name="PriceTotal" column="price_total" type="double" not-null="true"/>
<property name="UserID" column="user_id" type="integer" not-null="true"/>
<set name="OrderItems" table="orderitemstbl" inverse="true" cascade="all">
<key column="order_id"/>
<one-to-many class="OrderItem"/>
</set>
</class>
My Order Item map is:
<class name="OrderItem" table="orderitemstbl">
<id name="ID" column="orderitem_id" type="string" unsaved-value="null">
<generator class="uuid.hex"/>
</id>
<property name="OrderID" column="order_id" type="string" not-null="true" insert="false" update="false"/>
<property name="StockID" column="stock_id" type="string" not-null="true" insert="false" update="false"/>
<property name="Amount" column="amount" type="integer"/>
<property name="Price" column="price" type="double"/>
<many-to-one name="Order" class="Order" column="order_id" />
<many-to-one name="Stock" class="Stock" cascade="save-update" column="stock_id"/>
</class>
As a point, if I have the following code:
InsertOrder insertorder = new InsertOrder();
newOrder = new Order();
Stock newStk = InsertOrder.checkStock("d1e22501fbd4255600fbd42559d30001");
newOrder.addProduct(newStk,1,32);
newOrder.addProduct(newStk,1,32);
newOrder.addProduct(newStk,1,32);
newOrder.addProduct(newStk,1,32);
insertorder.newOrder(newOrder);
it works fine. One order is created with 4 order items. what am I doing wrong??
Peter
|