Hi
Are objects returned from a Hibernate criteria list() persistent? I've got a method fetching a list of objects, then setting an association to each intance. This method is transactional, so I'd expect those objects to be updated on exit. But nothing happens.
Code:public BookingModel settleCharges() throws Exception { // get existing, open charges from the database List<BookingModel> opencharges = dao.getOpenUspCharges(); BookingModel settlement = new BookingModel(); double totalcharge = 0; for (BookingModel charge : opencharges) { charge.setReferencebooking(settlement); settlement.getChildBookings().add(charge); totalcharge += charge.getAmount(); } settlement.setAmount(totalcharge); settlement.setCreatedate(new Date()); dao.save(settlement); }Code:<bean id="bookingService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="transactionManager"/> <property name="target" ref="bookingServiceTarget"/> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="settleCharges*">PROPAGATION_REQUIRED</prop> <prop key="load*">PROPAGATION_SUPPORTS</prop> <prop key="search*">PROPAGATION_SUPPORTS</prop> <prop key="*">PROPAGATION_SUPPORTS</prop> </props> </property> </bean>On exiting the settleCharges() method, the newly created BookingModel instance is inserted into the database, but the (composite) references are not updated.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"> <!-- Generated 20.07.2006 10:30:14 by Hibernate Tools 3.1.0.beta5 --> <hibernate-mapping> <class name="net.umbrella.data.model.BookingModel" table="BOOKINGS"> <id name="id" type="int"> <column name="ID" /> <generator class="native" /> </id> <version column="LASTMODIFIED" name="lastmodified" type="timestamp" /> <many-to-one name="clients" class="net.umbrella.data.model.ClientModel" fetch="select"> <column name="CLIENTID" not-null="true" /> </many-to-one> <many-to-one name="branches" class="net.umbrella.data.model.BranchModel" fetch="select"> <column name="BRANCHID" /> </many-to-one> <many-to-one name="users" class="net.umbrella.data.model.UserModel" fetch="select"> <column name="USERID" /> </many-to-one> <many-to-one name="referencebooking" class="net.umbrella.data.model.BookingModel" fetch="select"> <column name="BOOKINGID" /> </many-to-one> <many-to-one name="orders" class="net.umbrella.data.model.OrderModel" fetch="select"> <column name="ORDERID" /> </many-to-one> <many-to-one name="customers" class="net.umbrella.data.model.CustomerModel" fetch="select"> <column name="CUSTOMERID" /> </many-to-one> <many-to-one name="customerroles" class="net.umbrella.data.model.CustomerroleModel" fetch="select"> <column name="CUSTOMERROLEID" /> </many-to-one> <many-to-one name="accountsByCreditaccount" class="net.umbrella.data.model.AccountModel" fetch="select"> <column name="CREDITACCOUNTID" not-null="true" /> </many-to-one> <many-to-one name="accountsByDebitaccount" class="net.umbrella.data.model.AccountModel" fetch="select"> <column name="DEBITACCOUNTID" not-null="true" /> </many-to-one> <many-to-one name="besr" class="net.umbrella.data.model.BesrModel" fetch="select" cascade="all"> <column name="BESRID" /> </many-to-one> <many-to-one name="documenthistory" class="net.umbrella.data.model.DocumenthistoryModel" fetch="select" cascade="all"> <column name="DOCUMENTHISTORYID" /> </many-to-one> <property name="number" type="string"> <column name="NUMBER" length="50" /> </property> <property name="text" type="string"> <column name="TEXT" /> </property> <property name="remark" type="text"> <column name="REMARK" /> </property> <property name="amount" type="java.lang.Double"> <column name="AMOUNT" scale="4" /> </property> <property name="paymentdate" type="timestamp"> <column name="PAYMENTDATE" length="23" /> </property> <property name="createdate" type="timestamp"> <column name="CREATEDATE" length="23" /> </property> <property name="ccnameoncc" type="string"> <column name="CCNAMEONCC" /> </property> <property name="ccnumber" type="string"> <column name="CCNUMBER" length="50" /> </property> <property name="ccexpiration" type="timestamp"> <column name="CCEXPIRATION" length="23" /> </property> <property name="lastmodifiedby" type="string"> <column name="LASTMODIFIEDBY" length="100" /> </property> <set name="paymentInvoiceMaps" inverse="true"> <key> <column name="PAYMENTID" not-null="true" /> </key> <one-to-many class="net.umbrella.data.model.PaymentInvoiceMapModel" /> </set> <set name="childBookings" inverse="true" cascade="persist,save-update"> <key column="BOOKINGID" /> <one-to-many class="net.umbrella.data.model.BookingModel" /> </set> </class> </hibernate-mapping>
Is there a Hibernate bug preventing a persistence class to have an association onto itself?
I've got plenty of working examples and just can't find why this one is NOT. Even hints on what I should look into are welcome, getting desparate here.
Thanks
Simon


Reply With Quote
