Dúvida Mapeamento Hibernate em métodos gets?

Boa Tarde Amigos do Fórum,

Um conhecido de trabalho me mostrou um trabalho de faculdade que o mesmo esta desenvolvendo e nas classes beans dele ele fez o mapeamento dos atributos utilizando-se do Hibernate.

Porém, algo curioso chamou minha atenção, ele fez o mapeamento dos atributos da classe todos em cima dos métodos gets da classe.

Por exemplo:

Mapeamento Habitual

   @Column(name="descricao")
   private String descricao;

   public String getDescricao() {
      return this.descricao;
   }

   public void setDescricao(String descricao) {
      this.descricao = descricao;
   }

Mapeamento que ele usou

   private String descricao;

   @Column(name="descricao")
   public String getDescricao() {
      return this.descricao;
   }

   public void setDescricao(String descricao) {
      this.descricao = descricao;
   }

Agora a pergunta:

Isso realmente funciona ???
Quais os benefícios (se houver) para realizar esse tipo de mapeamento ???

Agradeço todos pela ajuda.

:?:

Funciona.
O método get tem como objetivo justamente retornar o tipo de dado esperado.
Vantagens, bom, não vejo uma utilidade mais adequada, o rendimento não será muito diferente em termos de performance.

Acho mais vantajoso colocar o mapeamento em cima da declaração das variáveis. Fica mais agrupado e fácil de ler.

Concordo.
Fico pensando num relacionamento @ManyToMany com a @Join anotada ali no meio dos getters…
#Tenso

:lol: tenho duas perguntinhas de novato para esse tópico antigo segue abaixo:

Se eu tenho uma classe chamada PESSOA que contenha 2 atributos

Nome
Idade

E se eu fizer 2 classes que descendem da classe PESSOA como Paulo e Jose e eu colocar @Column(name=“Nome”) sobre o Metodo setName que decende da super classe o Hibernate vai salvar normal mesmo @Column não estando sobre a variável é isso?

[quote=klanpaia] :lol: tenho duas perguntinhas de novato para esse tópico antigo segue abaixo:

Se eu tenho uma classe chamada PESSOA que contenha 2 atributos

Nome
Idade

E se eu fizer 2 classes que descendem da classe PESSOA como Paulo e Jose e eu colocar @Column(name=“Nome”) sobre o Metodo setName que decende da super classe o Hibernate vai salvar normal mesmo @Column não estando sobre a variável é isso?
[/quote]
A resposta não é tão simples quanto parece.
Veja bem, herança é um conceito OO.
Em programação estruturada temos algo parecido, que é o conceito de especialização generalização.
Normalmente se mapeia herança em duas situações distintas, a primeira, é quando a super classe não será espelhada no banco de dados, ou seja, ela não se torna uma entity.
Desta forma, ela recebe a annotation @MappedSuperclass e o hibernate não relaciona ela com nada no banco de dados, embora os atributos desta estejam disponíveis para mapeamento das sub classes.
A outra é quando a superclasse será convertida em tabela(s).
Nestas situações é preciso definir se a herança irá gerar uma única tabela ou mais de uma.
Caso seja gerada apenas uma tabela, todas as colunnas da superclasse, mais as das subclasses são mapeadas no banco de dados e uma coluna contendo o tipo de classe é criada.
Caso haja mais de uma tabela, haverá uma análise do relacionamento, geralmente onetoone.

A annotation responsável pela herança, quando a superclasse se tornará tabela, é a @Inheritance.
Pesquise sobre ela.