Hello,

I have met a problem for getHibernateTemplate().saveOrUpdate(order);

If the method is tested from class OrderTest's testCreateOrder(), it works fine and one order is inserted in the db. But if it is called from a serviceTest, no order is created and no error also. I am using Spring1.01, Hibernate 2.* and Oracle10g.

The method in OrderTest is :

public void testCreateOrder() {
Market market = marketDAO.loadMarket(new Long(1));

PaymentMethod pm = new PaymentMethod();
pm.setPaymentMethodId(new Long(1));

User u = new User();
u.setUserId(new Long(3));

String orderType = DomainCodes.ORDER_TYPE_ASK;

Order o = new Order();
o.setMarket(market);
o.setGroup(market.getGroup());
o.setUltimateGroup(market.getUltimateGroup());
o.setNumberOfLots(new Long(1));
o.setOrderFunction(DomainCodes.ORDER_FUNCTION_BID_ ASK);
o.setOrderStatus(DomainCodes.ORDER_STATUS_OPEN);
o.setOrderType(orderType);
o.setQuantityPerLot(new Long(2));
o.setPricePerUnit(new Long(10000));
o.setPaymentMethod(pm);
o.setProgram(market.getProgram());
o.setUser(u);
o.setAuditable(new Long(3), DomainCodes.AUDIT_REASON_NEW_RECORD, DomainCodes.AUDIT_STATUS_ACTIVE);

orderDAO.saveOrder(o);

if(orderType.equals(DomainCodes.ORDER_TYPE_ASK))
setCertificatesToOrder(market.getMarketId(), u.getUserId(), o, new Long(2));
}

It is fine with one order created.

=====================

Method in ServiceTest is:

public void testCreateOrder() {
Market market = marketDAO.loadMarket(new Long(1));

PaymentMethod pm = new PaymentMethod();
pm.setPaymentMethodId(new Long(1));

User u = new User();
u.setUserId(new Long(3));

String orderType = DomainCodes.ORDER_TYPE_ASK;

orderService.createOrder(new Long(2), new Long(30000), orderType, new Long(1), market, u);
}

No error but no order created in table.

============

The method createOrder() in Service is :

public void createOrder(Long quantity, Long pricePerUnit, String orderType, Long paymentMethodId, Market market, User user) {
PaymentMethod pm = new PaymentMethod();
pm.setPaymentMethodId(paymentMethodId);

Order o = new Order();
o.setMarket(market);
o.setAuditable(user.getUserId(), DomainCodes.AUDIT_REASON_NEW_RECORD, DomainCodes.AUDIT_STATUS_ACTIVE);
o.setGroup(market.getGroup());
o.setUltimateGroup(market.getUltimateGroup());
o.setNumberOfLots(new Long(1));
o.setOrderFunction(DomainCodes.ORDER_FUNCTION_BID_ ASK);
o.setOrderStatus(DomainCodes.ORDER_STATUS_OPEN);
o.setOrderType(orderType);
o.setQuantityPerLot(quantity);
o.setPricePerUnit(pricePerUnit);
o.setPaymentMethod(pm);
o.setProgram(market.getProgram());
o.setUser(user);

orderDAO.saveOrder(o);

if(orderType.equals(DomainCodes.ORDER_TYPE_ASK))
setCertificatesToOrder(market.getMarketId(), user.getUserId(), o, quantity);
}

The testCreateOrder method in OrderTest is almost a copy of createOrder method in ServiceTest.

=================

The applicationContext is :

<bean id="orderDAO" class="com.xyz.persistence.hibernate.dao.impl.Orde rDAOImpl">
<property name="sessionFactory"><ref local="localSession"/></property>
</bean>

<bean id="orderDAOService"
class="org.springframework.transaction.interceptor .TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="orderDAO"/></property>
<property name="transactionAttributes">
<!-- define the transaction specs here -->
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>


<bean id="orderServiceTarget" class="com.xyz.services.frontend.OrderServiceImpl" >
<property name="orderDAO"><ref local="orderDAO"/></property>
<property name="marketDAO"><ref local="marketDAO"/></property>
</bean>

<bean id="orderService"
class="org.springframework.transaction.interceptor .TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="orderServiceTarget"/></property>
<property name="transactionAttributes">
<!-- define the transaction specs here -->
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

I drop Other beans associated in applicationContext here to save space.

===================

The hibernate sql results are
(1) testCreateOrder in OrderTest

Hibernate: select market0_.MARKET_ID as MARKET_ID11_ .......
Hibernate: select order_sequence.nextval from dual
Hibernate: insert into ORDER_TABLE (ORDER_FUNCTION, .....

(2) testCreateOrder in ServiceTest
Hibernate: select market0_.MARKET_ID as MARKET_ID11_ .......
Hibernate: select order_sequence.nextval from dual

no insert into sql for this case.

Any input or thought?

Thanks very much