2012-01-21 12 views
6

Digamos que tenemos uno a muchos relación entre el cliente y el teléfono ..se utiliza el modo de hibernación en ir a buscar

class Customer{ 

@OneToMany(cascade = {CascadeType.ALL},mappedBy = "customer", fetch = FetchType.LAZY) 
@Fetch(FetchMode.SELECT) 
private List<Phone> phoneList; 

} 

En el código anterior, ¿cuál es la diferencia entre fetch = FetchType.LAZY y FetchMode.SELECT.

Lo leí que ambos son iguales, es decir, ambos cargaron la colección subyacente.

¿Alguien me puede explicar cuál usar cuando?

Respuesta

13

Fetch tipo (perezoso/ansioso) se refiere a cuando Hibernate buscar la asociación, ya sea de antemano cuando se obtiene la entidad (ansioso), o si se espera a que el código para pedir la asociación (perezoso).

Modo de búsqueda (seleccionar/unir) se refiere a cómo Hibernate buscará la asociación, es decir, si usa una instrucción SELECT extra, o si usa una combinación.

Algunas combinaciones de estas no tienen sentido, p. flojo + unirse. Si usa la recuperación diferida, entonces SELECT modo de búsqueda es el único que puede hacer.

Si usa la búsqueda ansiosa, puede elegir usar cualquiera de los modos de búsqueda.

+0

Gracias por la respuesta.Por lo tanto, en caso de búsqueda ansiosa, ¿qué modo de búsqueda es mejor usar..SELECCIONAR o UNIR? – Anand

+0

@anand: No hay "mejor", pero si la combinación funciona para usted, generalmente le dará un mejor rendimiento. – skaffman

Cuestiones relacionadas