CodeGym /Cursos /All lectures for PT purposes /Diferentes maneiras de obter um objeto

Diferentes maneiras de obter um objeto

All lectures for PT purposes
Nível 1, Lição 219
Disponível

método get()

Se você deseja obter um objeto por seu ID (ou Chave Primária), o Hibernate possui três métodos para isso:

  • carregar()
  • pegar()
  • encontrar()

Eles fazem a mesma coisa, mas há nuances. O formato geral do método get() é:

EntityClass Name = session.get(EntityClass.class, Object primaryKey);

O método get() recebe como segundo parâmetro o ID (Primary Key) do objeto que precisa retornar. Em seguida, ele carrega esse objeto do banco de dados e o retorna. Exemplo:

User user = session.get(User.class, 2);

Se um registro com este ID não for encontrado no banco de dados, o método retornará nulo.

método load()

O segundo método para carregar um objeto é o método load() . O formato geral do método load() é o mesmo:

EntityClass Name = session.load(EntityClass.class, Object primaryKey);

No entanto, seu comportamento é diferente do método get() .

Primeiro, esse método não retorna um objeto real, mas um proxy: um stub virtual.

Em segundo lugar, ao usar o método load() , não há verificação se existe tal entrada no banco de dados. Em vez disso, o Hibernate cria imediatamente um objeto proxy com o ID passado e o retorna.

Em terceiro lugar, todo o trabalho com o banco de dados ocorrerá ao chamar os métodos do objeto proxy. Se você tentar chamar, por exemplo, o método getName() , ocorrerá a primeira chamada ao banco de dados. Exemplo:

User user = session.load(User.class, new Integer(123));
String name = user.getName(); //this is where the first call to the database will occur

O método load() não deve ser usado para verificar a presença de objetos no banco de dados - ele simplesmente não mostrará isso. Além disso, se você passar um ID inválido, como null, para ele, ele simplesmente retornará null.

método find()

O método find() foi passado para a interface Session do padrão JPA. E como você sabe, esse padrão descreve não apenas a assinatura de métodos, mas também regula o comportamento.

Este método funciona exatamente como o método get() . Se o objeto não foi encontrado pela chave passada, o método simplesmente retornará null.

User user = session.find(User.class, -2); //method will return null

método atualizar()

Outro método útil relacionado ao carregamento de um objeto de um banco de dados é o método refresh() .

Lembra do método persist() que atualizava os dados no banco de dados com base no objeto passado? Assim, o método refresh() funciona exatamente ao contrário: ele atualiza um objeto existente com base nos dados do banco de dados.

Esse comportamento é necessário se, por exemplo, ao gravar um objeto no banco de dados, vários procedimentos armazenados são chamados para corrigir os dados gravados.

Nesses casos, pode ser útil reler o objeto do banco de dados se houver a possibilidade de ele ter sido alterado. Exemplo:

User user = new User();
user.setName("Kolyan");
session.persist(user);
session.flush();  //Force called SQL INSERT and call triggers

session.refresh(user);
// here we continue to work with the updated object
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION