It should somehow be possible to cache the query plans for criteria queries and for “immutable” criteria queries i.e. the ones for which hibernate.criteria.copy_tree is set to false, it should maybe be the default to cache query plans.