is it required to flush and clear hibernateTemplate?

Hi ,
I am using Hibernate and Spring. we are using getHibernateTemplate().find() in our DAOs. After the find() is called, do we have to explicitly call flush() and clear()? Will it lead to memory leak if we dont flush and clear?
cuttieveenzAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

mahomeCommented:
flush() don't help, becaus it only synchronizes with the DB
clear() helps if you are loading to much data
you can use evict() instead of clear() for specific objects
http://docs.jboss.org/hibernate/stable/core/reference/en/html/performance.html

It don't load to memory leaks but if you are loading to much data, you have to evict()/clear() so that the session-cache doesn't get too big.

Normaly the session is cleared when it will be closed and you don't have to clear it on you own.
0
cuttieveenzAuthor Commented:
actually the data consists of CLOB column data...hence it is very large and leads to memory leak
0
mahomeCommented:
Then I would advice to iterate through the result and evict each result

Iterator iter = session.createQuery("from CatImpl as cat").iterate();
 
while(iter.hasNext() ) {
	Cat currentCat = (Cat) iter.next();
	session.evict(currentCat);	
}

Open in new window

0
Exploring SQL Server 2016: Fundamentals

Learn the fundamentals of Microsoft SQL Server, a relational database management system that stores and retrieves data when requested by other software applications.

cuttieveenzAuthor Commented:
In my DAO code is as follows:

List emp = getHibernateTemplate().find("from Employee");
return emp;

Here emp is a list of objects which has CLOB data. I get a memory leak due to this clob in hibernate.

That's why i changed the code as follows:

List emp = getHibernateTemplate().find("from Employee");
getHibernateTemplate().flush();
getHibernateTemplate().clear();
return emp;

Will this help?
0
mahomeCommented:
Again flush() is no help for you. It only writes the current status of the session in the DB. That is not what you want. The objects remain in the session after flushing().

Your solution only helps partially as after this line:
List emp = getHibernateTemplate().find("from Employee");

all is in the session cache. If that amount is to much it crashes in that line, you have to use my proposed solution.

Here the example for your need:

Iterator iter = session.createQuery("from Employee").iterate();
 
List emps = new ArrayList();
while( iter.hasNext() ) {
        Employee currentEmp = iter.next();
        session.evict(currentEmp); 
        emps.add(currentEmp);    
}
return emps;

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Sathish David Kumar NArchitectCommented:
flush() is used for flush getHibernateTemplate() content u were used in  session factory creation
0
josephtsangCommented:
Just a side question, do you experience LazyInitializationException when you call to get associated objects from the Employee you queried for, like employee.getDepartment().getName() ? What I try to ask is: is the Hibernate Session closed right after each call to HibernateTemplate?

Are you using CMT or BMT?? I ask this because the solution to your problem really depends on how you define the demarcation of a transaction and of a Hibernate session.

As mahome suggested, the Hibernate Session object will cache the result of any queries and will clear the cache out automatically when it is closed. But when does a Hibernate Session close? As you use the class  HibernateTemplate from Spring and make a query, if you setting is not correct, you will find that the Hibernate Session will always close itself right after each call.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java EE

From novice to tech pro — start learning today.