1:n relationship / ejbCreate()
mlange Jan 16, 2003 6:42 AMHi,
serious problem: I definded a 1:n relationship between a table TRANSACTION_TYPES and a table TRANSACTIONS.
TRANSACTION contains a foreign key field for the transaction type (TRANS_TRAT_FK). Here is my ejb-jar.xml for this:
<abstract-schema-name>Transaction</abstract-schema-name>
<cmp-field>
<field-name>transactionId</field-name>
</cmp-field>
<cmp-field>
<field-name>transactionType</field-name>
</cmp-field>
[ ... ]
<ejb-relation>
<ejb-relation-name>Transaction-TransactionType</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>transType-has-trans</ejb-relationship-role-name>
One
<relationship-role-source>
<ejb-name>AccountTransactionType</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>transactions</cmr-field-name>
<cmr-field-type>java.util.Set</cmr-field-type>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>trans-belongs-to-transType</ejb-relationship-role-name>
Many
<cascade-delete/>
<relationship-role-source>
<ejb-name>AccountTransaction</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>relTransactionType</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
</ejb-relation>
My jbosscmp-jdbc.xml looks like this:
<ejb-relation>
<ejb-relation-name>Transaction-TransactionType</ejb-relation-name>
<foreign-key-mapping/>
<ejb-relationship-role>
<ejb-relationship-role-name>transType-has-trans</ejb-relationship-role-name>
<key-fields>
<key-field>
<field-name>transactionTypeId</field-name>
<column-name>TRANS_TRAT_FK</column-name>
<key-field>
</key-fields>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>trans-belongs-to-transType</ejb-relationship-role-name>
<key-fields/>
</ejb-relationship-role>
</ejb-relation>
This is my ejbCreate() for a TRANSACTION:
public Long ejbCreate(
Long transactionId,
Long transactionType,
Long transactionAccountNumber,
Timestamp transactionDate,
BigDecimal transactionAmount,
Long foreignAccountNumber,
Long foreignBankIdentificationCode,
String subject,
Timestamp transactionDateCreated)
throws CreateException, EJBException, SQLException
{
log.info(
"Creating Transaction "
+ transactionId
+ ", "
+ transactionAccountNumber
+ ", "
+ transactionAmount
+ ", "
+ subject);
setTransactionId(transactionId);
setTransactionType(transactionType);
setTransactionAccountNumber(transactionAccountNumber);
setTransactionDate(transactionDate);
setTransactionAmount(transactionAmount);
setForeignAccountNumber(foreignAccountNumber);
setForeignBankIdentificationCode(foreignBankIdentificationCode);
setSubject(subject);
setTransactionDateCreated(transactionDateCreated);
return null;
}
My Question: if I try to call ejbCreate() of the AccountTransactionBean the container always wants to insert TRANS_TRAT_FK twice: "javax.ejb.CreateException: Could not create entity:java.sql.SQLException..."
So, is it necessary to set the cmr-field as a <cmp-field> in the descriptors? If not, how should I define the cmr-field in ejbCreate()? If I insert a transaction, it always has to take a row from TRANSACTION_TYPES!
So, I don't catch that!
Thanks,
Marek