11.07.2015 Views

Persistência com JPA2 e Hibernate - Inpi

Persistência com JPA2 e Hibernate - Inpi

Persistência com JPA2 e Hibernate - Inpi

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

89 JPQL4 @Id @GeneratedValue5 private Long id;67 private String nome ;89 // GETTERS E SETTERS10 }Código Java 4.42: Funcionario.java1 @Entity2 public class Departamento {34 @Id @GeneratedValue5 private Long id;67 private String nome ;89 @OneToMany10 private List < Funcionario > funcionarios ;1112 // GETTERS E SETTERS13 }Código Java 4.43: Departamento.javaEm muitos dos casos, quando buscamos uma lista de departamentos, não precisamos dos dadosdos seus respectivos funcionários. Assim, optamos pelo <strong>com</strong>portamento LAZY para o relacionamentoentre departamentos e funcionários.No entanto, em alguns casos, estaremos sim interessados nos dados dos departamentos e dosseus funcionários. Podemos realizar uma consulta para recuperar a lista de departamentos. Alémdisso, <strong>com</strong>o o <strong>com</strong>portamento escolhido foi LAZY, uma consulta adicional será realizada pelo provedorpara cada departamento a fim de recuperar os seus funcionários.No total, teremos N + 1 consultas, onde N é o número de departamentos obtidos na primeiraconsulta. Note que se o relacionamento entre departamentos e funcionários fosse EAGER entãoapenas uma consulta seria necessária nesses casos.Para solucionar esse problema, podemos utilizar o <strong>com</strong>ando left join fetch na consulta quebuscaria os departamentos.1 SELECT DISTINCT (d) FROM Departamento d LEFT JOIN FETCH d. funcionariosAplicando o <strong>com</strong>ando left join fetch, os departamentos e seus respectivos funcionários sãorecuperados em apenas uma consulta.Exercícios de Fixação20 Faça uma consulta para obter todos os autores e seus respectivos livros. No pacote br.<strong>com</strong>.k19.testesdo projeto K19-Criteria, crie a classe ListaAutoresELivros.1 public class ListaAutoresELivros {2 public static void main ( String [] args ) {3 EntityManagerFactory factory = Persistence4 . createEntityManagerFactory (" K21_jpql_pu ");www.k19.<strong>com</strong>.br 89

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!