| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 09:54:21
|
bonfarj
Java Ninja
![[Avatar]](/images/avatar/1454ca2270599546dfcd2a3700e4d2f1.jpg)
Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline
|
Vejam o que diz a documentação do Hibernate:
4.1.4. Declare accessors and mutators for persistent fields (optional)
Cat declares accessor methods for all its persistent fields. Many other ORM tools directly persist instance variables. We believe it is better to provide an indirection between the relational schema and internal data structures of the class. By default, Hibernate persists JavaBeans style properties, and recognizes method names of the form getFoo, isFoo and setFoo. You may switch to direct field access for particular properties, if needed.
Properties need not be declared public - Hibernate can persist a property with a default, protected or private get / set pair.
Pelo que eu entendi é possível fazer com que o Hibernate acesse diretamente atributos privados sem getters e setters, é isso mesmo? Caso positivo, como eu posso fazer isso?
|
IGOR BRITO ALVES
@igoralves
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 10:00:08
|
rdgms
Virtual Machine Man
![[Avatar]](/images/avatar/825ab77fe4eb3419db2fc9c6ceff7146.jpg)
Membro desde: 21/12/2006 22:08:57
Mensagens: 628
Localização: São Paulo
Offline
|
Hibernate can persist a property with a default, protected or private get / set pair.
Hibernate pode persistir os atributos que estão como default, protected OU private get / set
|
PDF, JPG, GIF, DOC e DOCX
JAVA! SCALA!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 10:20:36
|
bonfarj
Java Ninja
![[Avatar]](/images/avatar/1454ca2270599546dfcd2a3700e4d2f1.jpg)
Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline
|
rdgms wrote:
Hibernate can persist a property with a default, protected or private get / set pair.
Hibernate pode persistir os atributos que estão como default, protected OU private get / set
Oi, rdgms!
Até aí tudo bem, atualmente eu mantenho meus atributos como private e crio getters e setters para todos eles. O problema é que para mim manter um atributo privado com getter e setter equivale a ter um atributo público, pois qualquer um pode ler e escrever, o acesso é irrestrito.
Acho que estou caindo na real, não há como o Hibernate manter atributos privados persistíveis sem getter e setter. Estou estou enganado ou o Hibernate nos atrapalha no encapsulamento?
Abraços a todos,
This message was edited 1 time. Last update was at 03/11/2008 10:22:04
|
IGOR BRITO ALVES
@igoralves
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 11:18:27
|
rjbcordeiro
JavaEvangelist
Membro desde: 27/03/2007 09:10:23
Mensagens: 307
Localização: Olinda - PE
Offline
|
só não entendi uma coisa, se vc criar uma classe sem gets e sets e com todos os atributos privados, como sua aplicação vai utilizar esta classe? ou como você vai popular seu objeto e jogar no hibernate para que ele possa cadastrar no banco. Acho que não é muito viável o que você esta tentando fazer.
|
Não desista
topico == resolvido ? '[RESOLVIDO]' : :'( |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 12:18:52
|
fabiofalci
GUJ Master
![[Avatar]](/images/avatar/c359889a833e7612e0cff1dc69d272bc.png)
Membro desde: 11/04/2006 09:23:14
Mensagens: 1056
Localização: Porto Alegre - RS
Offline
|
Tenta isso
http://www.hibernate.org/116.html#A20
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 12:30:38
|
bonfarj
Java Ninja
![[Avatar]](/images/avatar/1454ca2270599546dfcd2a3700e4d2f1.jpg)
Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline
|
rjbcordeiro wrote:só não entendi uma coisa, se vc criar uma classe sem gets e sets e com todos os atributos privados, como sua aplicação vai utilizar esta classe?
Na minha opinião o mundo fora da classe não precisa conhecer suas propriedades, seus atributos. O que deve ficar público são os métodos que fazem uso destes atributos, abstraindo a forma como a classe funciona internamente, encapsulando. Getters e setters nada mais são do que métodos que permitem a leitura e escrita direta de um atributo. Se vc tem um atributo privado com getter e setter, na minha opinião (sempre ressalto!) vc tem um atributo público.
rjbcordeiro wrote:só não entendi uma coisa, se vc criar uma classe sem gets e sets e com todos os atributos privados, como sua aplicação vai utilizar esta classe?
Com os métodos públicos, que fazem o elo entra a classe e o mundo exterior. Por exemplo, se vc tem uma classe ContaBancariae executa o método gerarExtrato(), vc não precisa saber que esta classe possui um atributo privado operacoes. Será que vc precisaria necessariamente de um getter para este atributo?
rjbcordeiro wrote:ou como você vai popular seu objeto e jogar no hibernate para que ele possa cadastrar no banco. Acho que não é muito viável o que você esta tentando fazer.
Esse é o ponto... caí na real, não vejo como. Como falei, para mim o Hibernate incentiva o "não encapsulamento".
Abraços!
|
IGOR BRITO ALVES
@igoralves
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 12:39:42
|
bonfarj
Java Ninja
![[Avatar]](/images/avatar/1454ca2270599546dfcd2a3700e4d2f1.jpg)
Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline
|
Wow, acho que é isso que eu preciso, vou testar e aviso aqui!!
|
IGOR BRITO ALVES
@igoralves
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 12:56:24
|
bonfarj
Java Ninja
![[Avatar]](/images/avatar/1454ca2270599546dfcd2a3700e4d2f1.jpg)
Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline
|
Funcionou perfeitamente, esqueçam minha crítica ao hibernate ele voltou a ser sensacional pra mim!
Abraços e muito obrigado!
|
IGOR BRITO ALVES
@igoralves
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/11/2008 11:19:34
|
rjbcordeiro
JavaEvangelist
Membro desde: 27/03/2007 09:10:23
Mensagens: 307
Localização: Olinda - PE
Offline
|
usando seu exemplo da ContaBancaria, com certeza ela devera ter um atributo, provavelmente privado, saldo. Como você vai atribuir um saldo a esta conta e como outras classes de sua aplicação irá saber o saldo atual da conta se você não tem métodos de acesso para este atributo?
ps.: Quando eu falei em getts e setts, eu já sabia que são métodos de acesso aos atributos e também sei que por padronização utilizou-se estes nomes de métodos, obrigado pela explicação.
|
Não desista
topico == resolvido ? '[RESOLVIDO]' : :'( |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/11/2008 11:48:47
|
bonfarj
Java Ninja
![[Avatar]](/images/avatar/1454ca2270599546dfcd2a3700e4d2f1.jpg)
Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline
|
rjbcordeiro wrote:usando seu exemplo da ContaBancaria, com certeza ela devera ter um atributo, provavelmente privado, saldo. Como você vai atribuir um saldo a esta conta e como outras classes de sua aplicação irá saber o saldo atual da conta se você não tem métodos de acesso para este atributo?
A rigor você não precisa de um atributo saldo, vc pode criar um método calcularSaldo() para obtê-lo através dos débitos e créditos na conta. E não estou dizendo que criar getters e setters e errado, longe disso, o que não acho certo é criar estes métodos sem necessidade, dar visibilidade aos atributos sem necessidade.
Abraços,
|
IGOR BRITO ALVES
@igoralves
|
|
|
 |
|
|