Named Query sort order by referenced object

Hi
I have a Service object and each contains a collection of ServiceEvent objects. The ServiceEvent objects each have a date attribute. I want to get 10 distinct services that have the most recent ServiceEvents, i.e. to keep processing ServiceEvents till I have 10 separate Services. There may be 10,000 Services and 10 million ServiceEvents in the system.
Using SQL this would be relatively simple, but I want to try and use the MW and Named Queries as much as possible and keep custom SQL to a minimum. Is there a way to create a query like this, either in MW, or using an Amendment method with the After Load event? I have tried the following code to amend the descriptor:
DescriptorQueryManager queryManager = descriptor.getQueryManager();
ReadAllQuery recentServices = (ReadAllQuery)queryManager.getQuery("RecentServices");
recentServices.addAscendingOrdering("") // want to put service.getMostRecentEvent().getDate() in here
Many thanks if you can help
James

Brilliant James, just what I was looking for.
I'm afraid that I am still stuck with the 1-1 mapping for mostRecentEvent. I have a defined a mapping and set the Reference Descriptor to be ServiceEvent, setting a single table reference for serviceId. But I know that there is a 1-many relationship in the database and I really need something equivalent to the following SQL
select ServiceEvent.serviceId, max(ServiceEvent.date)
from ServiceEvents
group by ServiceEvent.serviceId
Is there any way to achieve this? Otherwise I'll give up on a mostRecentEvent 1-1 mapping and add a 1-1 query key as you suggest.
James

Similar Messages

  • SQL Query Sorting Order issue - Help needed

    Hi All,
    I am using the following query in my project to display the records in the grid.
    /* Formatted on 04-09-2013 PM 8:01:51 (QP5 v5.149.1003.31008) */
      SELECT eol,
             status_msg,
             relation,
             building_name,
             device_id id,
             CEIL (SYSDATE - updated_date) duration,
             lab_id,
             aisle_id,
             aisle_location_id,
             ip_address,
             port,
             slot_num,
             hostname,
             pid,
             description,
             sl_num,
             eitms_code,
             status,
             dnd_flag,
             aisle,
             aisle_location,
             spname,
             os_version,
             user_id,
             TO_CHAR (updated_date, 'YYYY-MM-DD HH24:MI:SS') updated_date,
             isterm_svr,
             net_type,
             DEVICE_GROUP_REF,
             cmd_id_ref,
             LISTAGG (TESTBED_ID, ',') WITHIN GROUP (ORDER BY TESTBED_ID)
                AS testbeds_id_ref,
             LISTAGG (NAME, ',') WITHIN GROUP (ORDER BY TESTBED_ID)
                AS testbeds_names,
             spname || '-' || ip_address || '-' || port AS child_asset_group
        FROM DEVICE_TESTBED_VW
       WHERE lab_id IN
                ('7099849',
                 '10769617',
                 '4258712',
                 '10513562',
                 '10515074',
                 '5882676',
                 '8330925')
    GROUP BY eol,
             status_msg,
             relation,
             device_id,
             lab_id,
             aisle_id,
             aisle_location_id,
             ip_address,
             port,
             slot_num,
             hostname,
             pid,
             description,
             sl_num,
             eitms_code,
             status,
             dnd_flag,
             aisle,
             aisle_location,
             spname,
             os_version,
             user_id,
             updated_date,
             isterm_svr,
             net_type,
             DEVICE_GROUP_REF,
             cmd_id_ref,
             building_name
    ORDER BY building_name ASC,
             LOWER (child_asset_group) ASC,
             LOWER (relation) DESC
    The problem is , if any one sorting with any column  , the order is not correct
    In this below code , i have done sorting by port . But the result data order is not correct .
    /* Formatted on 04-09-2013 PM 8:07:02 (QP5 v5.149.1003.31008) */
      SELECT eol,
             status_msg,
             relation,
             building_name,
             device_id id,
             CEIL (SYSDATE - updated_date) duration,
             lab_id,
             aisle_id,
             aisle_location_id,
             ip_address,
             port,
             slot_num,
             hostname,
             pid,
             description,
             sl_num,
             eitms_code,
             status,
             dnd_flag,
             aisle,
             aisle_location,
             spname,
             os_version,
             user_id,
             TO_CHAR (updated_date, 'YYYY-MM-DD HH24:MI:SS') updated_date,
             isterm_svr,
             net_type,
             DEVICE_GROUP_REF,
             cmd_id_ref,
             LISTAGG (TESTBED_ID, ',') WITHIN GROUP (ORDER BY TESTBED_ID)
                AS testbeds_id_ref,
             LISTAGG (NAME, ',') WITHIN GROUP (ORDER BY TESTBED_ID)
                AS testbeds_names,
             spname || '-' || ip_address || '-' || port AS child_asset_group
        FROM DEVICE_TESTBED_VW
       WHERE lab_id IN
                ('7099849',
                 '10769617',
                 '4258712',
                 '10513562',
                 '10515074',
                 '5882676',
                 '8330925')
    GROUP BY eol,
             status_msg,
             relation,
             device_id,
             lab_id,
             aisle_id,
             aisle_location_id,
             ip_address,
             port,
             slot_num,
             hostname,
             pid,
             description,
             sl_num,
             eitms_code,
             status,
             dnd_flag,
             aisle,
             aisle_location,
             spname,
             os_version,
             user_id,
             updated_date,
             isterm_svr,
             net_type,
             DEVICE_GROUP_REF,
             cmd_id_ref,
             building_name
    ORDER BY PORT ASC
    Can some one help me to fix this issue?

    Hi,
    Sorry, it's not clear what you want.
    Whenever you have a problem, please post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) from all tables involved, so that the people who want to help you can re-create the problem and test their ideas.
    Also post the results you want from that data, and an explanation of how you get those results from that data, with specific examples.
    Simplify the problem as much as possible. For example, if you really need to GROUP BY 28 columns, post a problem where you need to GROUP BY only 2 or 3 columns.  (Just explain that you really have 28, so people will give solutions that are sure to work for all 28).)
    Always say which version of Oracle you're using (for example, 11.2.0.2.0).
    See the forum FAQ: https://forums.oracle.com/message/9362002

  • Sort order in an hierarchy

    Hello Experts,
            How to sort order of the objects in an hierarchy without any change in the master data based on the monthly ratings of the business. Ex:
    East
       NY
       NJ
    West
       CA
            Now I want the order in East to be changed so that NJ comes first.
            Can this be possible and if so how?
    Thanks,
    Nikki

    Aneesh,
            I activated the hierarchy and also ran the attribute change run but still doesn't show the new order i.e.
    NJ
    NY
         The technical names defined are 1 for NY and 2 for NJ and in the report it still shows NY and then NJ under East. Please throw some light on this issue at the earliest.
    Thanks,
    The hierarchy is defined as time dependent hierarchy structure. Would this matter? Should it be defined as hierarchy structure time dependent?

  • Create a collection in the beforeshown by query sort by designer does not sort

    In the beforeshown function of a screen, I create a collection. This collection will be displayed in my target screen. I have added in the designer a Sort order by the displayed screen does not conform to this sort.
    Where is my error? The creation of the collection in the beforeshown function makes the query sort order execute before the collection is really created? Or the collection is not really database saved because it has been created in the beforeshown function?
    In the case I must do the sort in the Created function of the target screen with something like
    screen.StrengthCollection.setOrderBy()
    But I do not know how to give the right parameter to setOrderBy...
    Yves Pflieger

    Hi,
    You can try
    To Bind a Query Parameter to a Field
    1.Create a query that accepts a parameter (for example: the ID of a customer). For more information, see How to: Design a Query by Using the Query Designer.
    2.Add the query to the Screen Content Tree. For more information, see How to: Design a Silverlight Screen by Using the Screen Designer.
    3.Add a local field to the screen. For more information, see How to: Add a Local Property to a Silverlight Screen.
    4.In the Screen Members List of the Screen Designer, select the parameter of the query.
    5.On the View menu, click Properties Window.
    6.Select the Parameter Value text box.
    7.Select or type the name of the local field.
    You can refer to article below:
    https://msdn.microsoft.com/en-us/library/ff851987.aspx

  • Any way to set the sort order other than in the query?

    The report has an OrderBy parameter so the user can select which field is used for sorting. The query has an OrderBy clause referencing the parameter. The problem is that it doesn't always pay any attention to the parameter. (Since it appears to be intermittent my suspicion is that it really never pays any attention to it but that sometimes whatever actually is determining the order gives the same results.)
    The problem is that putting an OrderBy clause in a query is the only way I know of to determine the output order of a report. Is there any other way?
    Thanks.

    Unfortunately Break Order doesn't seem to be controlling the sort order. I found that the value was set on numerous fields but I've changed them all to None & it still isn't displaying in the order specified by the OrderBy parameter.
    Note that this is a 'form layout' report with one page/record so it doesn't really have columns-but the pages are supposed to be printed in the order chosen by the user from a list of values. It doesn't seem to matter what's selected from that list though, the output appears in the same order as if no Order By clause is specified.
    Can you think of anything else that would cause the report to ignore the order by clause?
    thanks.

  • Sorting  named query result

    hi, i am using an amendment method to sort named query results, it works fine for the queries that takes no parameters , but when it comes to a parameterized named query it doesn't work, any idea?

    hi, thank you for your reply,
    1- this is the code of the amendment method:
    ReadAllQuery raq =
    (ReadAllQuery)descriptor.getDescriptorQueryManager().getQuery("findUsersByCompany");
    raq.addDescendingOrdering("name");
    2- what do you mean but how do i execute the query?
    actually i have wrapped the named query in a session bean method, and i have simply dragged the method from the data control into my web page in a readonly table, i pass the parameter in a static manner in the page definition
    3- the result is displayed, no error is showed but it's not ordered correctly
    !!!

  • Sort order of results in UOW Conformed Query ??

    We would like to know what is the expected behavior when a query with ascending ordering or descending ordering is run with UOW conformed.
    We know for sure that SQL generated and submit to the database with ORDER BY CLAUSES (which get the data in the database and sorted properly)
    However, with a confirm query, the database result will in turn, combine selected objects in the UNIT OF WORK.
    Will the combined collection of object be sorted in the prescribed ordering ?
    For example:
    If in UOW we have some uncommitted CAT object CAT-9, and CAT- 5
    In Database we return CAT-1, CAT-3, CAT-7 sorted in ascending order
    Will toplink return after the UOW conformed query, a collection in the following order ?
    CAT-1, CAT-3, CAT-5, CAT-7, CAT-9 ???
    Please advice.
    Thank you in advance.

    No, any new objects that conform to the query will be added to the end of the result set, so may not match the query's sort order.
    If you need the conformed results to maintain ordering you can either,
    - Sort the results in-memory after executing the query through Collections.sort(List).
    - Use a TreeSet as the query resultCollectionClass to sort the query results.

  • TopLink doesn't sort data received using Named query

    Hello!
    I'm trying to build a Tree table using a TopLink Named query in my application.
    There are Id, Parent|_Id, Code and Name columns in the corresponding database table, where Id and Parent|_Id are linked together by Foreign key (typical tree). I used TopLink to describe this table in the Model part of my application. There I wrote a Named query, without using a query constructor (not Expression radio button, but SQL radio button). Here the text of query:
    select * from regions a connect by prior a.Id = a.Parent_Id start
    with a.Id is null order by a.Code
    Then I created a Data control and tried to build a JSF page with data based on this query, as tree-table.
    But I discovered the fact, that data under the same node on the same leaf level of the Tree are not sorted by code on the JSF page. For example, data may be situated as follows (Code - Name):
    2. wwwwwwwwwwww
    2.3.kkkkkkkkkkkk
    2.1.fffffffffffffffffffff
    2.2.oooooooooo
    1. qqqqqqqqqqqqqqqq
    1. 2. lllllllllllllllllllllllllllll
    1. 1. hhhhhhhhhhhhhh
    etc.
    I verified this query on other environment (PL/SQL Developer, SQL+), but didn't found such unsorted results anywhere.
    Please, give me an advice to avoid this problem.
    Thanks.

    Hi
    Something to do with TreeMap(TreeSet). I tried with TreeSet but it didn't work. Here is the code :
    In servlet :
    Connection lConnection = getConnection(pRequest);
    String lSQL = "";
    Statement lStatement;
    ResultSet lResultSet;
    Hashtable lLtypeHashtable = new Hashtable();
    lStatement = lConnection.createStatement();
    lSQL = "SELECT RCID,RCMEANING FROM REFERENCECODES WHERE RCDOMAIN = 'LOCATIONTYPE' AND RCROWSTATE > 0 order by RCMEANING";
    lResultSet = lStatement.executeQuery(lSQL);
    while(lResultSet.next())
    String lRcid = lResultSet.getString(1);
    String lRcmeaning = lResultSet.getString(2);
    lLtypeHashtable.put(lRcid.trim(),lRcmeaning.trim());
    if(lResultSet != null) lResultSet.close();
    if(lStatement != null) lStatement.close();
    pRequest.setAttribute("LtypeHashtable",lLtypeHashtable);
    //Below Query is executed when one data from select element is selected
    String lLType = DisplayUtilities.getString(pRequest.getParameter("LType"),true);
    //LType is name of select element in JSP.
    if (lLType != null)
    lSQL = lSQL + " AND " + lUpperCaseFunction + "(LOCATIONTYPE)" +
    " = " + DBUtilities.formatString(lLType.toUpperCase());
    pRequest.setAttribute("rLType",lLType+"");
    In JSp :
    <%
    Hashtable lLtypeHashtable = (Hashtable)request.getAttribute("LtypeHashtable");
    %>
    <TR>
    <TD width="15%"> <div align="left">
    <select name="LType" size="1" >
    <option Value="">< Select ></option>
    <%
    if(lLtypeHashtable != null)
    Enumeration enum = lLtypeHashtable.keys();
    while(enum.hasMoreElements())
    String key = (String)enum.nextElement();
    String value = (String)lLtypeHashtable.get(key);
    String flagBack = "";
    if(key.equals((String)request.getAttribute("rLType")))
    flagBack = "selected";
    %>
    <option Value="<%=key%>" <%=flagBack%>><%=value%></option>
    <%
    %>
    </select></div>
    </TD>
    </TR>
    How should I implement TreeSet?
    Looking forward for an early reply.
    Thanks.

  • Order by clause with Named Query

    hi
    i have to give order by clause in Named Query
    how we have to specify is can any body help
    thanks
    Harish

    Assuming an Entity called Handset:
    select h from Handset h order by h.description

  • Passing an array of objects to a named query

    I'm trying to use a named query that will have a
    in() expression operator (clause) to retrieve a set of objects.
    The in() operator requires an array of objects to pass in.
    Specifically I want to pass an array of BigDecimal of unknown size.
    The query looks like that:
    ExpressionBuilder seq = new ExpressionBuilder();
    Expression exp = seq.get("id").in(keys);
    ReadAllQuery query = new ReadAllQuery();
    query.setReferenceClass(RegistrationNumberSequencer.class);
    query.addArgument("keys");
    query.setSelectionCriteria(exp);
    And the "keys" would be:
    Object[] keys = new Object[2];
    keys[0]= new BigDecimal(1);
    keys[1]= new BigDecimal(2);
    I have got a conversion exception(Could not convert to BigDecimal class) when executing the query.
    Can I pass this array as a parameter somehow ?
    Thanks a lot
    Ovidiu

    Hi Ovidiu,
    My apologies for the missed code. You need to pass the vector of elements into another vector, so TopLink will interpret the single element of the second vector as the correct query argument, and expend the elements in the first vector into the IN clause.
    The named query defined I sent in previous mail is still correct, but you need to pass in the argument like:
    Vector keys = new Vector();
    keys.addElement(new BigDecimal(1));
    keys.addElement(new BigDecimal(2));
    Vector arg = new Vector(1);
    arg.addElement(keys);
    Now you can pass the arg in when executing the query, and should get the correct result.
    To stand my claim, I did a mini test using our TopLink Employee demo and here is the generated SQL:
    Call:SELECT t0.VERSION, t1.EMP_ID, t0.L_NAME, t0.F_NAME, t1.SALARY, t0.EMP_ID, t0.GENDER, t0.END_DATE, t0.START_DATE, t0.MANAGER_ID, t0.START_TIME, t0.END_TIME, t0.ADDR_ID FROM EMPLOYEE t0, SALARY t1 WHERE ((t0.EMP_ID IN (1, 2)) AND (t1.EMP_ID = t0.EMP_ID))
    You can see the IN clause in generated as expected!
    As Doug said, we do not officially support array as query argument yet. I would use the proper way to build the query.
    King

  • Order By in Named Query

    Hello,
    is it possible to set ORDER BY in a Named Query Expression build through the Expression Builder?
    Or is it possible to trigger this while executing the Named Query in the UnitOfWork?
    Thanks,
    Thomas

    Nemata,
    The mapping editor in JDeveloper does not yet allow you to configure query ordering. To do this you will need to write a piece of code called an after-load or ammendment method that customizes descriptor configuration when being loaded from the XML representation. In this method you will look up the query you defined and customize any additional settings, such as ordering.
    An example after-load method would be placed on any arbitrary helper class and would look like:
        public static void afterLoadEmployee(ClassDescriptor descriptor) {
            ReadAllQuery raq = (ReadAllQuery)descriptor.getDescriptorQueryManager().getQuery("findAllEmployee");
            raq.addAscendingOrdering("lastName");
        }To have this method invoked you will need to configure it on the descriptor in the JDeveloper mapping editor.
    1. In the structure pane when the map is selected go to the descriptor for the class you wish to customize its query.
    2. Using the right mouse menu on the descriptor select the advanced properties sub-menu and select 'after-load'. This will enable the additional after-load tab on the descriptor's editor.
    3. In this after-load panel you will need to specify the helper class where the static after-load method is written as well as the signature for the method wanted.
    Now, the next time the application is run this method will be invoked and you ordering customizations will be applied.
    This may sound a little complex but is a very useful technique for configuration or customization of descriptor, mapping, or query parameters that are not visible in the mapping editor or are more easily accomplished through code.
    Doug

  • Adding "order by" functionality to the expression of a toplink named query

    hello,
    using JDev 10.1.3, I have made a Toplink named query findCustomersByCompany with a parameter company (String) to pass the name of the company of interest. I used the expression option from the format tab with"1.companyId LIKE IGNORE CASE company".
    The selection works fine but now I want the results to be ordered by customer name, the native order in the database is based on creation date.
    How can I add the order by clause to my named query using the expression format?
    kind regards,
    Nemata

    Look at http://www.thespot4oracle.com/SQL/re-6593_Adding-an-ordering-clause-using-a-TopLink-amendment-method.aspx
    Hope this helps.

  • Query Builder - sort order causing ORA-00979 error

    Hello,
    I'm having an issue with the "sort order" clause in the query builder tool when using a function on the same column.
    I've build a simple query in the gui and the following statement is displayed in the SQL Window
    select     "DEMO_ORDER_ITEMS"."ORDER_ID" as "ORDER_ID",
         sum(DEMO_ORDER_ITEMS.QUANTITY) as "QUANTITY"
    from     "DEMO_ORDER_ITEMS" "DEMO_ORDER_ITEMS"
    group by DEMO_ORDER_ITEMS.ORDER_ID
    and if I add a sort order of "1" on the quantity field, the following query is changed to
    select     "DEMO_ORDER_ITEMS"."ORDER_ID" as "ORDER_ID",
         sum(DEMO_ORDER_ITEMS.QUANTITY) as "QUANTITY"
    from     "DEMO_ORDER_ITEMS" "DEMO_ORDER_ITEMS"
    group by DEMO_ORDER_ITEMS.ORDER_ID
    order by DEMO_ORDER_ITEMS.QUANTITY DESC
    When running this query I get an error
    failed to parse SQL query:
    ORA-00979: not a GROUP BY expression
    It is quite obvious what is wrong with the query but I don't know how to get the query builder tool to generate the correct statement. The order by clause should be order by sum(DEMO_ORDER_ITEMS.QUANTITY) DESC.
    I've tried to do some searching and haven't found much documentation on this issue. Any assistance is appreciated.
    Thanks,
    Tony

    While this statement is generally certainly true and should also be remembered, it is not really helpful for the specific case.
    I think the behaviour described is a bug. However this might be one a little difficult to solve. The user unfortunatly can't influence much of the query builder results directly.
    Either put 1 into the order by clause or use the column alias name without table alias name ("QUANTITY" only).
    My personal solution would be NOT TO use any sort criteia in the query builder. This makes sense in so far as the generated SQL is often basis for some report. If that is an interactive report you won't add a sort order anyway. This is a layout thing and layout will be handled by the end user itself. he can choose whatever sorting he wants.
    Edited by: Sven W. on Jul 22, 2009 11:43 AM

  • Treat objects from named query as new ones

    Hello,
    I use TopLink 11.1.1.1.0 and I need to do following. I want to read object from database with named query and let TopLink treat them like new object created in java. Is it possible? Obejcts are in one table but the named query computes them with select from several different tables, so this obejcts are not present in the table.
    Why I need it? It is import of data from one module of our application to another. Previously it was done in java. About 500 000 objects were read in one module just to convert into 20 000 objects in another module. If database does this conversion (named query with grouping which reads the 20 000 objects) it is much faster and take much less memory.
    What I can do is to create new class with the same fields query this objects and then copy them to object I need. But I don't like creating new class just for this.
    Thank for any help
    Frank

    Thanks for help I solved it different way eventually. I made a stored procedure which inserts data to the table of SOURCE_ITEMS. First I call stored procedure, then I load all new created SOURCE_ITEMS with ReadAllQuery (I have business parameters by which to select them) and make post processing in java with them. I used StoredProcedureCall in TopLink so if exception occurs and transaction rollbacks, stored procedure will rollback as well (I tried it, works for sure:).
    StoredProcedureCall call = new StoredProcedureCall();
    call.setProcedureName(SQL_IMPORT_CALL);
    call.addNamedArgumentValue(SQL_IMPORT_PARAM_1, getId());
    call.addNamedArgumentValue(SQL_IMPORT_PARAM_2, getXXX().getId());
    call.addNamedArgumentValue(SQL_IMPORT_PARAM_3, getYYY.getId());
    call.addNamedArgumentValue(SQL_IMPORT_PARAM_4, getZZZ());
    DataModifyQuery query = new DataModifyQuery();
    query.setCall(call);
    query.setShouldBindAllParameters(true);
    // insert of imported SOURCE_ITEMS
    ctx.executeQuery(query);
    Thanks Chris and hope this will help to somebody else as well..
    Frank
    Edited by: user604333 on Nov 17, 2010 12:20 PM
    Edited by: user604333 on Nov 17, 2010 12:20 PM
    Edited by: user604333 on Nov 17, 2010 12:20 PM

  • Retrieving array of objects using Named Query

    Can i retrieve an array of objects using a Named Query? The execute query method of Session returns only an Object but not an array. Please let me know if there is any possibility.
    Thanks in advance,

    Hi,
    You define a named ReadAllQuery query object, and after query execution, you can cast the returned Object as Vector, and further convert it to an array.
    King

Maybe you are looking for

  • How to setup Internet connection in Solaris 10

    Hi All, I recently installed Solaris 10 in my laptop as a guest OS which is having Host OS of Windows 7 by using Virtual Box. I shared all my hardwares and network connection and still I cannot use the internet connection in my guest OS (Solaris 10).

  • Client Proxy Urgent

    Hi ALL, I am working with Proxy to File In this scenario I have to collect data from an Internal table which has around 25 fields with around 50 records. I planned to collect the data into the Internal table and then pass to the structure. My main do

  • Reg:Default Dashboard

    Hi all, My Client is looking for this requirement:- Need Default Dashboard Page for all the Reports and Responsibilites. I have built a Default Dashboard (with name Modules Overiew). We are having 6 modules in total(Financials, Manufacturing,Projects

  • How to create buttons in Standard DYNPRO

    I have to show an LVA in VA01/02/03. I have to create a button in the standard dynpros, but i wouldn't like to registry the object. How can i do this? Thanks!

  • HT204088 I purchased an app twice (by accident) - how do I get credit?

    I purchased an app twice (by accident) - how do I get credit?