In My Code, I created DetachedCriteria instance once and want to use it twice:
create:
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
dc.add....
dc.addOrder.....
use:
findByDetachedCriteria(dc);
countByDetachedCriteria(dc);
the findByDetachedCriteria() method use getExecutableCriteria(session) to obtain a Criteria instance and then set some limitations on the Criteria instance. findByDetachedCriteria() was executed successfully but the countByDetachedCriteria() failed because countByDetachedCriteria() method also use getExecutableCriteria(session) method and In Hibernate, a DetachedCriteria instance always return the same Criteria instance it created when calling getExecutableCriteria(session) method.
So if you create a DetachedCriteria instance and use it in different methods, you will get confused because when you calling getExecutableCriteria(session) of the DetachedCriteria instance and manipulate the returnning Criteria instance, the next time you call getExecutableCriteria(session) method it will return the changed Criteria instance.
My question is, why Hibernate doesn't return a new Criteria instance each time we calling the getExecutableCriteria(session) method, what's the design consideration on return the same Criteria instance?
Thanks!
|