cómo desaprender un objeto de hibernación

¿Cómo puedo desaprender un objeto de hibernación, de modo que se admita el polimorfismo?

Considere el siguiente ejemplo. Las clases A y B son dos entidades hibernadas. B tiene dos subtipos C y D.

List<A> resultSet = executeSomeHibernateQuery();
for(A nextA : resultSet) {
    for(B nextB : nextA.getBAssociations() {
        if(nextB instanceof C) {
            // do something for C
        } else if (nextB instanceof D) {
            // do something for D
        }
    }
}

Este código no ejecuta el bloque C o D, ya que la colección B se ha cargado de forma perezosa y todas las instancias de B son proxies de Hibernate. Me gustaría una manera de desaprender cada instancia.

Nota: Me doy cuenta de que la consulta se puede optimizar para obtener con entusiasmo todos los B's. Estoy buscando una alternativa.

Respuestas a la pregunta(3)

Su respuesta a la pregunta