JavaRush /Blogue Java /Random-PT /Perguntas da entrevista sobre hibernação
Dr-JohnZoidberg
Nível 41
Киев

Perguntas da entrevista sobre hibernação

Publicado no grupo Random-PT
Este artigo é uma tradução e aprimoramento de artigos estrangeiros (uma lista de recursos está listada no final do artigo). As respostas a algumas perguntas são ampliadas e são fornecidos links para recursos de terceiros que contêm respostas que podem surgir durante o processo de leitura. 1) O que é hibernar? É uma estrutura para mapeamento objeto-relacional de entidades em bancos de dados relacionais tradicionais. As principais funcionalidades do framework: 1) Geração e atualização automática de tabelas em bancos de dados; 2) Como as principais consultas ao banco de dados (salvar, atualizar, excluir e pesquisar) são apresentadas como métodos do framework, o código que o desenvolvedor escreve é ​​significativamente reduzido; 3) Fornece o uso de uma linguagem semelhante a SQL (HQL - hibernate query language). Consultas HQL podem ser escritas junto com objetos de dados (classes POJO preparadas para trabalhar com um banco de dados). 2) Como hibernarajuda na programação? O Hibernate implementa vários recursos que simplificam bastante o trabalho do desenvolvedor. — Um desses recursos é que o hibernate permite ao desenvolvedor evitar escrever a maioria das consultas SQL (elas já estão implementadas, basta usar os métodos que o framework fornece). — Nos bastidores, o Hibernate possui um monte de ferramentas úteis que aceleram significativamente o aplicativo, sendo as mais notáveis ​​o cache de dois níveis e o ajuste fino de retiradas preguiçosas e de busca. — Gera tabelas no próprio banco de dados. 3) Métodos para configurar o trabalho com o Hibernate. Existem quatro maneiras de configurar o trabalho com o Hibernate: - usando anotações; - hibernate.cfg.xml; - hibernate.properties; - persistência.xml. O método de configuração mais comum: através de anotações e do arquivo persistence.xml, como para os arquivos hibernate.properties e hibernate.cfg.xml, então hibernate.cfg.xml é mais importante (se a aplicação tiver os dois arquivos, então as configurações de o arquivo hibernate.cfg é aceito.xml). A configuração com anotações, embora conveniente, nem sempre é possível; por exemplo, se você deseja ter diferentes configurações de entidades para diferentes bancos de dados ou para diferentes situações, então você deve usar arquivos de configuração xml. 4) Quais interfaces principais o Hibernate usa? Existem cinco interfaces principais que são usadas em todas as aplicações relacionadas ao Hibernate: - Interface de sessão; - Interface SessionFactory; — Interface de configuração; — Interface de transação; — Interfaces de consulta e critérios. 5) Qual é a função da interface Session no Hibernate? Sessão é a interface principal responsável pela comunicação com o banco de dados. Também ajuda a criar objetos de solicitação para obter objetos persistentes. (objeto persistente - objeto que já está no banco de dados; objeto request - objeto que é obtido quando recebemos o resultado de uma consulta no banco de dados, é com ele que a aplicação funciona). O objeto Session pode ser obtido em SessionFactory: Session session = sessionFactory.openSession(); A função da interface Session: é um wrapper para conexão jdbc com o banco de dados; (https://ru.wikipedia.org/wiki/Java_Database_Connectiv..) - é uma fábrica para transações (de acordo com a documentação oficial transação - permite que o aplicativo defina unidades de trabalho, o que, em essência, significa que a transação define os limites das operações associadas ao banco de dados). — é o guardião do cache obrigatório de primeiro nível. 6) Qual é a função da interface SessionFactory no Hibernate? É a partir do objeto SessionFactory que obtemos objetos do tipo Session. Existe apenas um SessionFactory para todo o aplicativo e ele é inicializado quando o aplicativo é iniciado. SessionFactory armazena em cache metadados e consultas SQL que são frequentemente usadas pelo aplicativo durante a operação. Ele também armazena em cache informações que foram recebidas em uma das transações e podem ser utilizadas em outras transações. O objeto SessionFactory pode ser obtido usando a seguinte chamada: SessionFactory sessionFactory = configuração.buildSessionFactory(); 7) Que tipos de coleções são fornecidas no Hibernate? Saco, Conjunto, Lista, Mapa, Matriz. 8) O que é uma coleção tipo Bag e por que ela é utilizada? Em sua implementação o tipo de coleção Bag é muito semelhante ao Set, a diferença é que Bag pode armazenar valores duplicados. Bag armazena uma lista não indexada de elementos. A maioria das tabelas no banco de dados possui índices que exibem a posição de um elemento de dados em relação um ao outro; esses índices são representados na tabela como uma coluna separada. Com o mapeamento objeto-relacional, os valores de uma coluna de índice são mapeados para um índice em um Array, um índice em uma Lista ou uma chave em um Mapa. Se você precisar obter uma coleção de objetos que não contenham dados de índice, poderá usar coleções do tipo Bag ou Set (as coleções contêm dados em formato não classificado, mas podem ser classificadas de acordo com a solicitação). 9) Qual a diferença no funcionamento dos métodos load();? e pegue();? método carregar(); geralmente usado quando você não tem certeza de que o objeto solicitado já está no banco de dados. Se o objeto não for encontrado, o método lança uma exceção. Se o objeto for encontrado, o método retorna um objeto proxy, que é um link para o objeto localizado no banco de dados (a solicitação do banco de dados ainda não foi feita, um tipo de recuperação lenta), uma solicitação direta ao banco de dados quando acessamos diretamente o objeto necessário por meio de um objeto proxy. método get(); usado então, você não tem 100% de certeza se o objeto solicitado está no banco de dados. No caso de acessar um objeto inexistente, o método get(); retornará nulo. Se o objeto for encontrado, o método get(); retornará o próprio objeto e a consulta ao banco de dados será feita imediatamente. 10) O que o Lazy busca no Hibernate? O tipo de checkout lento no Hibernate está associado a entidades folha (filhas) e define uma política de checkout compartilhado se houver uma solicitação para fazer check-out de uma entidade pai. Um exemplo simples: existe uma entidade Casa. Armazena informações sobre seu número, rua, número de apartamentos e informações sobre as famílias que moram nos apartamentos; essas famílias formam uma entidade filha relativa à entidade Casa. Quando solicitamos informações sobre uma Casa, pode ser completamente desnecessário sabermos informações sobre as famílias que nela vivem, aqui vem em nosso auxílio a busca preguiçosa, que nos permite configurar a entidade Casa para que as informações sobre as famílias sejam fornecidas apenas mediante solicitação, isso obscurece significativamente a solicitação e acelera a aplicação. ©dev-bay A maioria das tabelas no banco de dados possui índices que exibem a posição de um elemento de dados em relação um ao outro; esses índices são representados na tabela como uma coluna separada. Com o mapeamento objeto-relacional, os valores de uma coluna de índice são mapeados para um índice em um Array, um índice em uma Lista ou uma chave em um Mapa. Se você precisar obter uma coleção de objetos que não contenham dados de índice, poderá usar coleções do tipo Bag ou Set (as coleções contêm dados em formato não classificado, mas podem ser classificadas de acordo com a solicitação). 9) Qual a diferença no funcionamento dos métodos load();? e pegue();? método carregar(); geralmente usado quando você não tem certeza de que o objeto solicitado já está no banco de dados. Se o objeto não for encontrado, o método lança uma exceção. Se o objeto for encontrado, o método retorna um objeto proxy, que é um link para o objeto localizado no banco de dados (a solicitação do banco de dados ainda não foi feita, um tipo de recuperação lenta), uma solicitação direta ao banco de dados quando acessamos diretamente o objeto necessário por meio de um objeto proxy. método get(); usado então, você não tem 100% de certeza se o objeto solicitado está no banco de dados. No caso de acessar um objeto inexistente, o método get(); retornará nulo. Se o objeto for encontrado, o método get(); retornará o próprio objeto e a consulta ao banco de dados será feita imediatamente. 10) O que o Lazy busca no Hibernate? O tipo de checkout lento no Hibernate está associado a entidades folha (filhas) e define uma política de checkout compartilhado se houver uma solicitação para fazer check-out de uma entidade pai. Um exemplo simples: existe uma entidade Casa. Armazena informações sobre seu número, rua, número de apartamentos e informações sobre as famílias que moram nos apartamentos; essas famílias formam uma entidade filha relativa à entidade Casa. Quando solicitamos informações sobre uma Casa, pode ser completamente desnecessário sabermos informações sobre as famílias que nela vivem, aqui vem em nosso auxílio a busca preguiçosa, que nos permite configurar a entidade Casa para que as informações sobre as famílias sejam fornecidas apenas mediante solicitação, isso obscurece significativamente a solicitação e acelera a aplicação. ©dev-bay A maioria das tabelas no banco de dados possui índices que exibem a posição de um elemento de dados em relação um ao outro; esses índices são representados na tabela como uma coluna separada. Com o mapeamento objeto-relacional, os valores de uma coluna de índice são mapeados para um índice em um Array, um índice em uma Lista ou uma chave em um Mapa. Se você precisar obter uma coleção de objetos que não contenham dados de índice, poderá usar coleções do tipo Bag ou Set (as coleções contêm dados em formato não classificado, mas podem ser classificadas de acordo com a solicitação). 9) Qual a diferença no funcionamento dos métodos load();? e pegue();? método carregar(); geralmente usado quando você não tem certeza de que o objeto solicitado já está no banco de dados. Se o objeto não for encontrado, o método lança uma exceção. Se o objeto for encontrado, o método retorna um objeto proxy, que é um link para o objeto localizado no banco de dados (a solicitação do banco de dados ainda não foi feita, um tipo de recuperação lenta), uma solicitação direta ao banco de dados quando acessamos diretamente o objeto necessário por meio de um objeto proxy. método get(); usado então, você não tem 100% de certeza se o objeto solicitado está no banco de dados. No caso de acessar um objeto inexistente, o método get(); retornará nulo. Se o objeto for encontrado, o método get(); retornará o próprio objeto e a consulta ao banco de dados será feita imediatamente. 10) O que o Lazy busca no Hibernate? O tipo de checkout lento no Hibernate está associado a entidades folha (filhas) e define uma política de checkout compartilhado se houver uma solicitação para fazer check-out de uma entidade pai. Um exemplo simples: existe uma entidade Casa. Armazena informações sobre seu número, rua, número de apartamentos e informações sobre as famílias que moram nos apartamentos; essas famílias formam uma entidade filha relativa à entidade Casa. Quando solicitamos informações sobre uma Casa, pode ser completamente desnecessário sabermos informações sobre as famílias que nela vivem, aqui vem em nosso auxílio a busca preguiçosa, que nos permite configurar a entidade Casa para que as informações sobre as famílias sejam fornecidas apenas mediante solicitação, isso obscurece significativamente a solicitação e acelera a aplicação. ©dev-bay consulta direta ao banco de dados quando acessamos diretamente o objeto necessário por meio de um objeto proxy. método get(); usado então, você não tem 100% de certeza se o objeto solicitado está no banco de dados. No caso de acessar um objeto inexistente, o método get(); retornará nulo. Se o objeto for encontrado, o método get(); retornará o próprio objeto e a consulta ao banco de dados será feita imediatamente. 10) O que o Lazy busca no Hibernate? O tipo de checkout lento no Hibernate está associado a entidades folha (filhas) e define uma política de checkout compartilhado se houver uma solicitação para fazer check-out de uma entidade pai. Um exemplo simples: existe uma entidade Casa. Armazena informações sobre seu número, rua, número de apartamentos e informações sobre as famílias que moram nos apartamentos; essas famílias formam uma entidade filha relativa à entidade Casa. Quando solicitamos informações sobre uma Casa, pode ser completamente desnecessário sabermos informações sobre as famílias que nela vivem, aqui vem em nosso auxílio a busca preguiçosa, que nos permite configurar a entidade Casa para que as informações sobre as famílias sejam fornecidas apenas mediante solicitação, isso obscurece significativamente a solicitação e acelera a aplicação. ©dev-bay consulta direta ao banco de dados quando acessamos diretamente o objeto necessário por meio de um objeto proxy. método get(); usado então, você não tem 100% de certeza se o objeto solicitado está no banco de dados. No caso de acessar um objeto inexistente, o método get(); retornará nulo. Se o objeto for encontrado, o método get(); retornará o próprio objeto e a consulta ao banco de dados será feita imediatamente. 10) O que o Lazy busca no Hibernate? O tipo de checkout lento no Hibernate está associado a entidades folha (filhas) e define uma política de checkout compartilhado se houver uma solicitação para fazer check-out de uma entidade pai. Um exemplo simples: existe uma entidade Casa. Armazena informações sobre seu número, rua, número de apartamentos e informações sobre as famílias que moram nos apartamentos; essas famílias formam uma entidade filha relativa à entidade Casa. Quando solicitamos informações sobre uma Casa, pode ser completamente desnecessário sabermos informações sobre as famílias que nela vivem, aqui vem em nosso auxílio a busca preguiçosa, que nos permite configurar a entidade Casa para que as informações sobre as famílias sejam fornecidas apenas mediante solicitação, isso obscurece significativamente a solicitação e acelera a aplicação. ©dev-bay
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION