tenwit wrote:
Normally for inverse="false" collections, you want not-null="true" in all <key> elements pointing to them.
Also, you have no generator for the id. Which means that you must manually assign the ID first. Which you don't want. Set the correct generator for transactionId.
So the question is if I set the ID generator to be the same user-implemented one I use in the parent, will hibernate automatically copy the ID from the parent to child instead of generating a new ID? I suspect it will generate a new ID which I do not want since it obtains a key from the DB.
When I set it to the same generator as in the parent, I get a mapping exception:
org.hibernate.MappingException: Repeated column in mapping for entity: com.ms.pbcustody.transcapfx.model.FXExecution column: trans_id (should be mapped with insert="false" update="false")
These are the complete mappings:
Parent:
<?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 package="com.ms.pbcustody.transcapfx.model">
<class name="TCTransaction" table="TransCapture_beta..tc_transaction">
<cache usage="read-write"/>
<id name="transactionId" column="trans_id">
<generator class="com.ms.pbcustody.transcapfx.model.TransactionIdGenerator" />
</id>
<version name="storeTime" column="store_time" type="timestamp"/>
<property name="userId" column="user_id" not-null="true" />
<property name="transmissionId" column="transmission_id" not-null="true" />
<property name="transactionType" column="transaction_type" not-null="true" />
<property name="transactionStatus" column="transaction_status" not-null="true" />
<property name="processFlag" column="process_flag" not-null="true" />
<property name="authorizationTime" column="authorization_time" />
<property name="processingTime" column="processing_time" />
<property name="completionTime" column="completion_time" />
<property name="loginName" column="login_name" />
<property name="origTransId" column="orig_trans_id" />
<property name="referenceNo" column="reference_no" />
<property name="buClientId" column="bu_client_id" />
<property name="lastTransactionStatus" column="last_transaction_status" />
<property name="currentFlag" column="current_flag" not-null="true" optimistic-lock="false"/>
<property name="contentType" column="content_type" />
<property name="uuid" column="uuid" />
<set name="executions" inverse="false" cascade="all">
<cache usage="read-write"/>
<key column="trans_id" not-null="true"/>
<one-to-many class="com.ms.pbcustody.transcapfx.model.FXExecution" />
</set>
<many-to-one name="transmission" column="transmission_id" class="TCTransmission" fetch="join" update="false" insert="false" not-null="true" />
</class>
</hibernate-mapping>
Child:
<?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 package="com.ms.pbcustody.transcapfx.model">
<class name="FXExecution" table="TransCapture_beta..fx_execution">
<cache usage="read-write"/>
<id name="transactionId" column="trans_id">
<generator class="com.ms.pbcustody.transcapfx.model.TransactionIdGenerator" />
</id>
<property name="seqNo" column="seq_no" unique="true" not-null="true"/>
<property name="recordType" column="record_type" />
<property name="transactionType" column="transaction_type" />
<property name="transactionLevel" column="transaction_level"/>
<property name="productType" column="product_type"/>
<property name="referenceNo" column="reference_no"/>
<property name="blockId" column="block_id"/>
<property name="executionAccountNo" column="exec_account_no"/>
<property name="accountNo" column="account_no"/>
<property name="executionBroker" column="exec_broker"/>
<property name="tradeDate" column="trade_date"/>
<property name="settlementDate" column="settlement_date"/>
<property name="buyCcy" column="buy_ccy"/>
<property name="sellCcy" column="sell_ccy"/>
<property name="buyQuantity" column="buy_quantity"/>
<property name="sellQuantity" column="sell_quantity"/>
<property name="fxRate" column="fx_rate"/>
<property name="clientBaseEquivalent" column="client_base_equivalent"/>
<property name="hedgeVsSpeculative" column="hedge_vs_speculative"/>
<property name="hearsayIndicator" column="hearsay_ind"/>
<property name="taxIndicator" column="tax_ind"/>
<property name="custodianBroker" column="custodian_broker"/>
<property name="moneyManager" column="money_manager"/>
<property name="bookId" column="book_id"/>
<property name="dealId" column="deal_id"/>
<property name="exchangeRate" column="exch_rate"/>
<property name="acquisationDate" column="acquisation_date"/>
<property name="comments" column="comments"/>
<property name="linkId" column="link_id"/>
<many-to-one name="Transaction" column="trans_id" class="TCTransaction" update="false" insert="false" />
</class>
</hibernate-mapping>