-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Slow dynamic sql without Hibernate
PostPosted: Wed Nov 03, 2004 6:28 pm 
Newbie

Joined: Wed Nov 03, 2004 1:40 pm
Posts: 1
Scenario: I am considering Hibernate to solve data access problems. As an example, the code below is in the constructor of the ArAccountCollection class. the first query "stmt" takes ~40 minutes to return a resultset of 5500 records in production.

Question: How can I utilize Hibernate to make this a more efficient DAO class?

Hibernate version: na

Mapping documents: na

Code between sessionFactory.openSession() and session.close(): na

Full stack trace of any exception that occurs: na

Name and version of the database you are using: Name and version of the database you are using: MS SQL Server 2000 w/sp3

The generated SQL (show_sql=true):
package com.wfsc.lsa.harp.ar;

//imports
//creates a collection of HARP Accounts for the Annual Review
public class ArAccountCollection {
private java.util.Date processingTime;
private Vector accounts = new Vector();
public ArAccountCollection() {
}
public ArAccountCollection(java.util.Date processingTime) {
//initialize variables
dbConn = ConnectionManager.getConnection();
stmt = dbConn.createStatement();
//vw_harp_account_input is created from the following query:
// CREATE view vw_harp_account_input as
// SELECT
// harp.account_id, harp.new_flag, hlfico.fico, hlfico.fico_date,
// harp.cltv,
// harp.org_credit_line, harp.hist_high_home_val,
// alltel.occupancyCode, alltel.first_mortgage_principal_balance,
// alltel.special_code alltelSpecial_Code, alltel.delQTable,
// shaw.alltel_account, shaw.shaw_account, shaw.processing_time,
// shaw.first_mortgage_balance, shaw.currentBalance,
// shaw.credit_line,
// shaw.special_code shawSpecial_Code,
// RIGHT(shaw.sweep_flag, 1) ar_flag, shaw.twelveMonthDelinquent30,
// shaw.twelveMonthDelinquent60, shaw.twelveMonthDelinquent90,
// constants.min_fico,
// harp.account_type, harp.recDate,
// shaw.restrict_code, shaw.restrict_reason, shaw.restrict_date,
// harp.nextAnniversaryDate
// FROM constants, harp_accounts harp
// INNER JOIN harp_alltel_input alltel ON alltel.account_id =
// harp.account_id
// INNER JOIN harp_shaw_input shaw ON alltel.account_id =
// shaw.account_id
// LEFT JOIN harp_latest_fico hlfico ON harp.account_id =
// hlfico.account_id
// WHERE
// alltel.processing_time = shaw.processing_time
// and harp.new_flag = 'N'
// and harp.isClosed = 'N'
res = stmt.executeQuery("select * from vw_harp_account_input "
//JOE: changed = to > for testing.
+ " where processing_time > '"
+ Utility.dateToSqlString(processingTime)
+ "' order by account_id");
//loop thru each HARP Account and query additional info
while (res.next()) {
ArAccount ha = new ArAccount();
// do a bunch of other assignments
//use same connection and execute statements 2-5 and psmt
s2 = dbConn.createStatement();
r2 = s2.executeQuery("select "
+ "propertyValue from harp_property_value "
+ "where account_id = " + ha.getAccountID()
+ " and (source = 'MRAC' or source = 'appraisal') "
+ "and processing_time in "
+ "(select max(processing_time) from harp_property_value "
+ "where account_id = " + ha.getAccountID()
+ ") order by propertyValuationDate");
// loop thru r2 and do stuff

s3 = dbConn.createStatement();
r3 = s3.executeQuery("select "
+ "propertyValue from harp_property_value "
+ "where account_id = " + ha.getAccountID()
+ " and source = 'Initial value'");
// loop thru r3 and do stuff

s4 = dbConn.createStatement();
r4 = s4
.executeQuery("select max(processing_time) from harp_increase_action "
+ "where increased_amount > 0 and account_id = "
+ ha.getAccountID());
// loop thru r4 and do stuff
//processing_time is not indexed but needs to allow for nulls
strQuery = "select propertyValue "
+ "from harp_property_value " + "where account_id = "
+ ha.getAccountID() + " and processing_time < ? "
+ "order by processing_time desc";
}
pStmt = dbConn.prepareStatement(strQuery);
rs = pStmt.executeQuery();
// loop thru rs and do stuff

s5 = dbConn.createStatement();
r5 = s5.executeQuery("select flag_value "
+ "from harp_flag_history " + "where account_id = "
+ ha.getAccountID() + " and flag_type = 'he' "
+ " and date_changed = "
+ "(select max(date_changed) from harp_flag_history "
+ "where account_id = " + ha.getAccountID()
+ " and flag_type = 'he')");
// loop thru r5 and do stuff
// add to vector "accounts"
accounts.add(ha);
}
}
}


Debug level Hibernate log excerpt: na


Thx
Joe Gaber


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.