EclipseLink 2.3: One-to-one association [message #1386755] |
Fri, 20 June 2014 03:00  |
Eclipse User |
|
|
|
Hello,
I am getting an error when I fetch an associated object (1-1), using valueHolder.getValue(). Here is the relational structure:
#"Order-Transfer" model has 1-1 relation with "Order-transfer-accepted-event" model
#In the java bean, OrderTransfer class has the attribute "orderTransferAcceptedEventHolder", of type ValueHolderInterface.
#"Order-transfer-accepted-event" is actually a subclass of "TransferEvent" that is mapped to [Order_Event_Deatil] table in database.
#"TransferEvent" is a subclass of "OrderEvent" class; "OrderEvent" is mapped to [Order_Event] table.
#When I call {orderTranfer}.getOrderTransferAcceptedEventHolder().getValue() -> it internally creates a prepared statement "select from order_event t0, order_event_detail t1 where t1.order_event_no = ?"
Now this statement is missing "select * from..." syntax and hence I am getting
Error message - Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00936: missing expression
Please suggest.
|
|
|
|
|
|
Re: EclipseLink 2.3: One-to-one association [message #1387505 is a reply to message #1387043] |
Wed, 25 June 2014 03:25  |
Eclipse User |
|
|
|
Hello,
Please find the code snippet which is used to initialize:
Iterator<?> descItr = session.getDescriptors().values().iterator();
while (descI.hasNext()) {
ClassDescriptor descriptor = (ClassDescriptor) descItr.next();
...
for (Iterator<?> mapItr = descriptor.getMappings().iterator(); mapItr.hasNext();) {
DatabaseMapping mapping = (DatabaseMapping) mapItr.next();
...
if (mapping.isForeignReferenceMapping()) {
...
if mapping-field-is-of-ValueHolder-type { // 1-1 mapping
ContainerIndirectionPolicy policy = new ContainerIndirectionPolicy();
policy.setMapping(mapping);
policy.setContainerClass(CONTAINER_CLASS);
policy.initialize(); // To set the container-constructor
((ForeignReferenceMapping) mapping).setIndirectionPolicy(policy);
}
}
}
}
Now the {policy.initialize()} had to be called to fix the mapping issues, during code migration.
Now the OrderTransfer mapping is:
<class-mapping-descriptor xsi:type="relational-class-mapping-descriptor">
<class>business.trade.model.OrderTransfer</class>
<alias>OrderTransfer</alias>
<primary-key>
<field table="ORDER_TRANSFER" name="ORDER_TRANSFER_ID" xsi:type="column"/>
</primary-key>
...
<attribute-mapping xsi:type="one-to-one-mapping">
<attribute-name>orderEventAcceptedHolder</attribute-name>
<get-method>getOrderEventAcceptedHolder</get-method>
<set-method>setOrderEventAcceptedHolder</set-method>
<reference-class>business.order.model.event.TransferEvent</reference-class>
<foreign-key>
<field-reference>
<source-field table="ORDER_TRANSFER" name="ORDER_EVENT_NO_ACCEPTED" xsi:type="column"/>
<target-field table="ORDER_EVENT_DETAIL" name="ORDER_EVENT_NO" xsi:type="column"/>
</field-reference>
</foreign-key>
<foreign-key-fields>
<field table="ORDER_TRANSFER" name="ORDER_EVENT_NO_ACCEPTED" xsi:type="column"/>
</foreign-key-fields>
<selection-query xsi:type="read-object-query"/>
</attribute-mapping>
...
</class-mapping>
And the TransferEvent mapping, is
<class-mapping-descriptor xsi:type="relational-class-mapping-descriptor">
<class>business.order.model.event.TransferEvent</class>
<alias>TransferEvent</alias>
<primary-key>
<field table="ORDER_EVENT_DETAIL" name="ORDER_EVENT_NO" xsi:type="column"/>
</primary-key>
...
<attribute-mapping xsi:type="one-to-one-mapping">
<attribute-name>orderTransferAcceptedHolder</attribute-name>
<get-method>getOrderTransferAcceptedHolder</get-method>
<set-method>setOrderTransferAcceptedHolder</set-method>
<reference-class>business.trade.model.OrderTransfer</reference-class>
<foreign-key>
<field-reference>
<source-field table="ORDER_EVENT_DETAIL" name="ORDER_EVENT_NO" xsi:type="column"/>
<target-field table="ORDER_TRANSFER" name="ORDER_EVENT_NO_ACCEPTED" xsi:type="column"/>
</field-reference>
</foreign-key>
<selection-query xsi:type="read-object-query"/>
</attribute-mapping>
...
</class-mapping-descriptor>
The issue comes when, this code is invoked: orderTransfer.getOrderEventAcceptedHolder().getValue().
This is query generated, which lacks [SELECT *]
"select from order_event t0, order_event_detail t1 where t1.order_event_no = ?"
Hope you get the hint from this.
|
|
|
Powered by
FUDForum. Page generated in 0.06035 seconds