0

Here I want to pass a list of Ids and date as a parameter to the database query and I want the query to return data in a Map so the key is the id and List is the data against that id.

   Query<Data> query = rdsSession.createNativeQuery(DBQueries.DATA_QUERY, 
   Data.class).setParameterList("performance_id", listOfIds).setParameter("fromdate", fromDate);
   List<Data> listDBRecords = null;
   Map<String, List<Data> records=listDBRecords.stream().collect(Collectors.groupingBy(Data::getId));

So how can I achieve this result by passing multiple values(ie. ids) in the query and return that data? This is the query I have written

    public static final String SELECT_PORTFOLIO_SECURITY_DATA = "select capl.corporate_action_portfolio_level_id, " +
        "capl.performance_id, capl.forwardlooking_sequence_no, " +
        "capl.as_of_date, capl.price, casl.currency, capl.exchange_rate, " +
        "capl.gross_dividend, capl.net_dividend, capl.sub_portfolio_guid, capl.effective_date, capl.adjustment_weighted_factor, capl.price_adjustment_factor, " +
        "casl.share_adjustment_factor, casl.float_adjustment_factor, capl.index_shares, capl.input_tos_live, casl.input_float_live, capl.prediction_type from " +
        ConfigurationManager.getProperties().getProperty("rdsConnection.schema") +
        ".corporate_action_portfolio_level capl inner join " +
        ConfigurationManager.getProperties().getProperty("rdsConnection.schema") +
        ".corporate_action_security_level casl " +
        "on capl.performance_id = casl.performance_id and capl.as_of_date = casl.as_of_date and capl.prediction_type = casl.prediction_type and " +
        "capl.forwardlooking_sequence_no = casl.forwardlooking_sequence_no " +
        "where capl.performance_id = :performance_id and capl.as_of_date = :as_of_date and capl.prediction_type = 'PREDICTED' or capl.prediction_type = 'LIVE'";

Can someone tell what is the right way?

0 Answers0