[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] eclipselink-users Digest, Vol 39, Issue 15
|
Even when I use different builder or different expression still get the same error
log.fine("registering PurchaseFraudJdo queries with session");
// find purchases pending fraud review
ExpressionBuilder builder1 = new ExpressionBuilder();
ExpressionBuilder builder2 = new ExpressionBuilder();
ReadAllQuery readAllQuery = new ReadAllQuery(PurchaseFraudJdo.class);
readAllQuery.addArgument("pGoodCode");
readAllQuery.addJoinedAttribute("po");
// look for statuses 'pending review', 'blocked' or 'follow up'
Expression pendingExp =
builder2.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_PENDING_REVIEW).
or(builder2.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_RULES)).
or(builder2.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_SCORE)).
or(builder2.get("reviewStatusCode").equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_FOLLOW_UP));
Expression pendingExp2 =
builder2.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_PENDING_REVIEW).
or(builder2.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_RULES)).
or(builder2.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_SCORE)).
or(builder2.get("reviewStatusCode").equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_FOLLOW_UP));
Expression exp = builder2.get("po").get("pGoodCode").equal(builder2.getParameter("pGoodCode"));
exp = exp.and(builder2.get("po").get("date").
greaterThanEqual(builder2.postfixSQL("SYSDATE - " + DAYS_TO_LOOK_BACK)));
exp = exp.and(builder2.getField("CREATE_DATE").
greaterThanEqual(builder2.postfixSQL("SYSDATE - " + DAYS_TO_LOOK_BACK)));
exp = exp.and(pendingExp2);
readAllQuery.setSelectionCriteria(exp);
readAllQuery.setMaxRows(MAX_FRAUD_SEARCH_RESULTS);
readAllQuery.addDescendingOrdering("fraudScore");
readAllQuery.refreshIdentityMapResult();
readAllQuery.bindAllParameters();
server.registerToplinkQuery(FIND_ALL_PENDING_BY_PGOOD, readAllQuery);
// count all purchases pending fraud review
ReportQuery rptQuery = new ReportQuery(PurchaseFraudJdo.class, pendingExp);
rptQuery.addCount();
rptQuery.bindAllParameters();
rptQuery.setShouldReturnSingleValue(true);
server.registerToplinkQuery(FIND_PENDING_COUNT, rptQuery);
// find by purchase order id
builder2 = new ExpressionBuilder();
ReadObjectQuery readObjectQuery = new ReadObjectQuery(PurchaseFraudJdo.class);
readObjectQuery.addArgument("orderId");
exp = builder2.get("po").get("oid").equal(builder2.getParameter("orderId"));
readObjectQuery.setSelectionCriteria(exp);
readObjectQuery.bindAllParameters();
readObjectQuery.cascadePrivateParts();
server.registerToplinkQuery(FIND_BY_ORDER_ID, readObjectQuery);
}
This is the way mapping is defined
<class-mapping-descriptor xsi:type="relational-class-mapping-descriptor">
<class>hotwire.biz.order.fraud.PurchaseFraudJdo</class>
<alias>PurchaseFraudJdo</alias>
<primary-key>
<field table="PURCHASE_FRAUD" name="PURCHASE_ORDER_ID" xsi:type="column"/>
</primary-key>
<events xsi:type="event-policy"/>
<querying xsi:type="query-policy"/>
<attribute-mappings>
<attribute-mapping xsi:type="direct-mapping">
<attribute-name>blockReasonCode</attribute-name>
<field table="PURCHASE_FRAUD" name="BLOCK_STATUS_CODE" xsi:type="column"/>
</attribute-mapping>
<attribute-mapping xsi:type="direct-mapping">
<attribute-name>fraudScore</attribute-name>
<field table="PURCHASE_FRAUD" name="FRAUD_SCORE" xsi:type="column"/>
</attribute-mapping>
<attribute-mapping xsi:type="direct-mapping">
<attribute-name>fraudTypeCode</attribute-name>
<field table="PURCHASE_FRAUD" name="FRAUD_TYPE" xsi:type="column"/>
</attribute-mapping>
<attribute-mapping xsi:type="one-to-one-mapping">
<attribute-name>po</attribute-name>
<reference-class>hotwire.biz.order.PurchaseOrderJdo</reference-class>
<foreign-key>
<field-reference>
<source-field table="PURCHASE_FRAUD" name="PURCHASE_ORDER_ID" xsi:type="column"/>
<target-field table="PURCHASE_ORDER" name="PURCHASE_ORDER_ID" xsi:type="column"/>
</field-reference>
</foreign-key>
<foreign-key-fields>
<field table="PURCHASE_FRAUD" name="PURCHASE_ORDER_ID" xsi:type="column"/>
</foreign-key-fields>
<selection-query xsi:type="read-object-query"/>
</attribute-mapping>
<attribute-mapping xsi:type="direct-mapping">
<attribute-name>reviewedBy</attribute-name>
<field table="PURCHASE_FRAUD" name="REVIEW_CSR_ID" xsi:type="column"/>
</attribute-mapping>
<attribute-mapping xsi:type="direct-mapping">
<attribute-name>reviewedDate</attribute-name>
<field table="PURCHASE_FRAUD" name="DATE_REVIEWED" xsi:type="column"/>
</attribute-mapping>
<attribute-mapping xsi:type="direct-mapping">
<attribute-name>reviewStatusCode</attribute-name>
<field table="PURCHASE_FRAUD" name="REVIEW_STATUS" xsi:type="column"/>
</attribute-mapping>
<attribute-mapping xsi:type="direct-mapping">
<attribute-name>sourceTypeCode</attribute-name>
<field table="PURCHASE_FRAUD" name="SOURCE_TYPE" xsi:type="column"/>
</attribute-mapping>
<attribute-mapping xsi:type="direct-mapping">
<attribute-name>transactionStatusCode</attribute-name>
<field table="PURCHASE_FRAUD" name="ITINERARY_STATUS" xsi:type="column"/>
</attribute-mapping>
<attribute-mapping xsi:type="direct-mapping">
<attribute-name>updateName</attribute-name>
<field table="PURCHASE_FRAUD" name="UPDATE_NAME" xsi:type="column"/>
</attribute-mapping>
<attribute-mapping xsi:type="direct-mapping">
<attribute-name>verificationStatusCode</attribute-name>
<field table="PURCHASE_FRAUD" name="VERIFICATION_STATUS" xsi:type="column"/>
</attribute-mapping>
<attribute-mapping xsi:type="many-to-many-mapping">
<attribute-name>violatedFraudRuleList</attribute-name>
<reference-class>hotwire.biz.order.fraud.FraudRuleJdo</reference-class>
<private-owned>true</private-owned>
<relation-table>PURCHASE_FRAUD_RULE_VIOLATED</relation-table>
<source-relation-foreign-key>
<field-reference>
<source-field table="PURCHASE_FRAUD_RULE_VIOLATED" name="PURCHASE_ORDER_ID" xsi:type="column"/>
<target-field table="PURCHASE_FRAUD" name="PURCHASE_ORDER_ID" xsi:type="column"/>
</field-reference>
</source-relation-foreign-key>
<target-relation-foreign-key>
<field-reference>
<source-field table="PURCHASE_FRAUD_RULE_VIOLATED" name="FRAUD_RULE_CODE" xsi:type="column"/>
<target-field table="FRAUD_RULE" name="FRAUD_RULE_CODE" xsi:type="column"/>
</field-reference>
</target-relation-foreign-key>
<container xsi:type="list-container-policy">
<collection-type>org.eclipse.persistence.indirection.IndirectList</collection-type>
</container>
<indirection xsi:type="transparent-collection-indirection-policy"/>
<selection-query xsi:type="read-all-query">
<container xsi:type="list-container-policy">
<collection-type>org.eclipse.persistence.indirection.IndirectList</collection-type>
</container>
</selection-query>
<insert-query xsi:type="data-modify-query"/>
<delete-query xsi:type="data-modify-query"/>
<delete-all-query xsi:type="data-modify-query"/>
</attribute-mapping>
</attribute-mappings>
<descriptor-type>independent</descriptor-type>
<caching>
<cache-size>128</cache-size>
</caching>
<remote-caching>
<cache-size>128</cache-size>
</remote-caching>
<instantiation/>
<copying xsi:type="instantiation-copy-policy"/>
<tables>
<table name="PURCHASE_FRAUD"/>
</tables>
</class-mapping-descriptor>
-----Original Message-----
From: eclipselink-users-bounces@xxxxxxxxxxx [mailto:eclipselink-users-bounces@xxxxxxxxxxx] On Behalf Of eclipselink-users-request@xxxxxxxxxxx
Sent: Thursday, November 11, 2010 6:39 AM
To: eclipselink-users@xxxxxxxxxxx
Subject: eclipselink-users Digest, Vol 39, Issue 15
Send eclipselink-users mailing list submissions to
eclipselink-users@xxxxxxxxxxx
To subscribe or unsubscribe via the World Wide Web, visit
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
or, via email, send a message with subject or body 'help' to
eclipselink-users-request@xxxxxxxxxxx
You can reach the person managing the list at
eclipselink-users-owner@xxxxxxxxxxx
When replying, please edit your Subject line so it is more specific
than "Re: Contents of eclipselink-users digest..."
Today's Topics:
1. Re: EL building select count() instead of select count(*)
(Anuj Lal)
2. Re: EL building select count() instead of select count(*)
(Tom Ware)
3. Re: EL building select count() instead of select count(*)
(Tom Ware)
----------------------------------------------------------------------
Message: 1
Date: Thu, 11 Nov 2010 02:12:05 -0800
From: Anuj Lal <alal@xxxxxxxxxxx>
To: "eclipselink-users@xxxxxxxxxxx" <eclipselink-users@xxxxxxxxxxx>
Subject: Re: [eclipselink-users] EL building select count() instead of
select count(*)
Message-ID:
<D7ECC192E1809C469B612ECFC639CF898F6C48DB@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset="us-ascii"
Eclipselink 11.1.1.3.0 (eclipse link 2.0.3-r7973 ) not building addCount sql correctly
Building select count()... instead of select count(*)....
Same code wokrs fine with 11.1.1.2.0 ( eclipse link 1.2.1-r7082)
Code in the red causing issue
log.fine("registering PurchaseFraudJdo queries with session");
// find purchases pending fraud review
ExpressionBuilder builder = new ExpressionBuilder();
ReadAllQuery readAllQuery = new ReadAllQuery(PurchaseFraudJdo.class);
readAllQuery.addArgument("pGoodCode");
readAllQuery.addJoinedAttribute("po");
// look for statuses 'pending review', 'blocked' or 'follow up'
Expression pendingExp =
builder.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_PENDING_REVIEW).
or(builder.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_RULES)).
or(builder.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_SCORE)).
or(builder.get("reviewStatusCode").equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_FOLLOW_UP));
Expression exp = builder.get("po").get("pGoodCode").equal(builder.getParameter("pGoodCode"));
exp = exp.and(builder.get("po").get("date").
greaterThanEqual(builder.postfixSQL("SYSDATE - " + DAYS_TO_LOOK_BACK)));
exp = exp.and(builder.getField("CREATE_DATE").
greaterThanEqual(builder.postfixSQL("SYSDATE - " + DAYS_TO_LOOK_BACK)));
exp = exp.and(pendingExp);
readAllQuery.setSelectionCriteria(exp);
readAllQuery.setMaxRows(MAX_FRAUD_SEARCH_RESULTS);
readAllQuery.addDescendingOrdering("fraudScore");
readAllQuery.refreshIdentityMapResult();
readAllQuery.bindAllParameters();
server.registerToplinkQuery(FIND_ALL_PENDING_BY_PGOOD, readAllQuery);
// count all purchases pending fraud review
ReportQuery rptQuery = new ReportQuery(PurchaseFraudJdo.class, pendingExp);
rptQuery.addCount();
rptQuery.bindAllParameters();
rptQuery.setShouldReturnSingleValue(true);
server.registerToplinkQuery(FIND_PENDING_COUNT, rptQuery);
From: Anuj Lal
Sent: Thursday, November 11, 2010 12:58 AM
To: 'eclipselink-users@xxxxxxxxxxx'
Subject: EL building select count() instead of select count(*)
Importance: High
Eclipselink 11.1.1.3.0 (eclipse link 2.0.3-r7973 ) not building addCount sql correctly
Building select count()... instead of select count(*)....
Same code wokrs fine with 11.1.1.2.0 ( eclipse link 1.2.1-r7082)
Expression pendingExp =
builder.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_PENDING_REVIEW).
or(builder.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_RULES)).
or(builder.get("reviewStatusCode").
equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_SCORE)).
or(builder.get("reviewStatusCode").equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_FOLLOW_UP));
// count all purchases pending fraud review
ReportQuery rptQuery = new ReportQuery(PurchaseFraudJdo.class, pendingExp);
rptQuery.addCount();
rptQuery.bindAllParameters();
rptQuery.setShouldReturnSingleValue(true);
server.registerToplinkQuery(FIND_PENDING_COUNT, rptQuery);
building a query like this
SELECT COUNT() FROM PURCHASE_ORDER t0, PURCHASE_FRAUD t1 WHERE (((((t1.REVIEW_STATUS = ?) OR (t1.REVIEW_STATUS = ?)) OR (t1.REVIEW_STATUS = ?)) OR (t1.REVIEW_STATUS = ?)) AND (t0.PURCHASE_ORDER_ID = t1.PURCHASE_ORDER_ID))
bind => [P, R, S, F]
giving parsing expression
it building COUNT() instead of COUNT(*)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://dev.eclipse.org/mailman/private/eclipselink-users/attachments/20101111/03473b0e/attachment.htm>
------------------------------
Message: 2
Date: Thu, 11 Nov 2010 07:59:06 -0500
From: Tom Ware <tom.ware@xxxxxxxxxx>
To: EclipseLink User Discussions <eclipselink-users@xxxxxxxxxxx>
Subject: Re: [eclipselink-users] EL building select count() instead of
select count(*)
Message-ID: <4CDBE89A.1010101@xxxxxxxxxx>
Content-Type: text/plain; charset=windows-1252; format=flowed
Can you provide details about how PurchaseFraudJdo is mapped?
-Tom
Anuj Lal wrote:
> Eclipselink 11.1.1.3.0 (eclipse link 2.0.3-r7973 )
> not building addCount sql correctly
>
> Building select count()? instead of select count(*)?.
>
>
>
> Same code wokrs fine with 11.1.1.2.0 ( eclipse link
> 1.2.1-r7082)
>
>
>
>
>
>
>
>
>
> Expression pendingExp =
>
> builder.get("reviewStatusCode").
>
>
> equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_PENDING_REVIEW).
>
> or(builder.get("reviewStatusCode").
>
>
> equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_RULES)).
>
> or(builder.get("reviewStatusCode").
>
>
> equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_SCORE)).
>
>
> or(builder.get("reviewStatusCode").equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_FOLLOW_UP));
>
>
>
> // count all purchases pending fraud review
>
> ReportQuery rptQuery = new ReportQuery(PurchaseFraudJdo.class,
> pendingExp);
>
> rptQuery.addCount();
>
> rptQuery.bindAllParameters();
>
> rptQuery.setShouldReturnSingleValue(true);
>
> server.registerToplinkQuery(FIND_PENDING_COUNT, rptQuery);
>
>
>
>
>
> building a query like this
>
> SELECT COUNT() FROM PURCHASE_ORDER t0, PURCHASE_FRAUD t1 WHERE
> (((((t1.REVIEW_STATUS = ?) OR (t1.REVIEW_STATUS = ?)) OR
> (t1.REVIEW_STATUS = ?)) OR (t1.REVIEW_STATUS = ?)) AND
> (t0.PURCHASE_ORDER_ID = t1.PURCHASE_ORDER_ID))
>
> bind => [P, R, S, F]
>
>
>
>
>
> giving parsing expression
>
>
>
> it building COUNT() instead of COUNT(*)
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
------------------------------
Message: 3
Date: Thu, 11 Nov 2010 09:36:10 -0500
From: Tom Ware <tom.ware@xxxxxxxxxx>
To: Tom Ware <tom.ware@xxxxxxxxxx>
Cc: EclipseLink User Discussions <eclipselink-users@xxxxxxxxxxx>
Subject: Re: [eclipselink-users] EL building select count() instead of
select count(*)
Message-ID: <4CDBFF5A.7060904@xxxxxxxxxx>
Content-Type: text/plain; charset=windows-1252; format=flowed
In addition to the mapping information:
I notice that pendingExpression is being shared by both queries. That is
certainly not an EclipseLink best practice. What happens if you no longer share
that expression. (i.e. create a fresh expression for each query)
-Tom
Tom Ware wrote:
> Can you provide details about how PurchaseFraudJdo is mapped?
>
> -Tom
>
> Anuj Lal wrote:
>> Eclipselink 11.1.1.3.0 (eclipse link 2.0.3-r7973 )
>> not building addCount sql correctly
>> Building select count()? instead of select count(*)?.
>>
>>
>>
>> Same code wokrs fine with 11.1.1.2.0 ( eclipse link
>> 1.2.1-r7082)
>>
>>
>>
>>
>>
>>
>>
>>
>> Expression pendingExp =
>>
>> builder.get("reviewStatusCode").
>>
>>
>> equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_PENDING_REVIEW).
>>
>> or(builder.get("reviewStatusCode").
>>
>>
>> equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_RULES)).
>>
>> or(builder.get("reviewStatusCode").
>>
>>
>> equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_BLOCKED_BY_SCORE)).
>>
>>
>> or(builder.get("reviewStatusCode").equal(DatabaseCodes.PURCHASE_FRAUD_REVIEW_STATUS_FOLLOW_UP));
>>
>>
>>
>>
>> // count all purchases pending fraud review
>>
>> ReportQuery rptQuery = new ReportQuery(PurchaseFraudJdo.class,
>> pendingExp);
>>
>> rptQuery.addCount();
>>
>> rptQuery.bindAllParameters();
>>
>> rptQuery.setShouldReturnSingleValue(true);
>>
>> server.registerToplinkQuery(FIND_PENDING_COUNT, rptQuery);
>>
>>
>>
>>
>>
>> building a query like this
>>
>> SELECT COUNT() FROM PURCHASE_ORDER t0, PURCHASE_FRAUD t1 WHERE
>> (((((t1.REVIEW_STATUS = ?) OR (t1.REVIEW_STATUS = ?)) OR
>> (t1.REVIEW_STATUS = ?)) OR (t1.REVIEW_STATUS = ?)) AND
>> (t0.PURCHASE_ORDER_ID = t1.PURCHASE_ORDER_ID))
>>
>> bind => [P, R, S, F]
>>
>>
>>
>>
>>
>> giving parsing expression
>>
>>
>>
>> it building COUNT() instead of COUNT(*)
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> eclipselink-users mailing list
>> eclipselink-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>
------------------------------
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
End of eclipselink-users Digest, Vol 39, Issue 15
*************************************************