Hibernate

8 respostas
G

Boa tarde pessoal!!!

Tentarei explicar a minha dúvida…

tenho uma classe chamada Membro mais ou menos com a seguinte
estrutura

pubilc class Membro{

public String getStrValue(){



}

public int getIntValue(){



}



}

e uma outra classe chamada Cliente mais ou menos assim…

public class Cliente{

private Membro cliente_id;

private Membro nome;

get e set…
}

Todas as propriedades das minhas classes serão do tipo Membro,
Preciso que o hibernate busque o valor do método que eu definir,
por exemplo <property name=“nome” type=“string” access=“nome.getStrValue” / >

(Creio que o que fiz no exemplo nem passa perto de dar certo, foi só pra tentar explicar)

8 Respostas

maikonaraujo

Vc deve colocar os get/set com o nome dos atributos que vc definir no seu arquivo suaClasse.hbm.xml

Exemplo:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

<hibernate-mapping package="dados">
	<class name="Funcionario" table="funcionario" >	
		<id
			column="funcionarioid"
			name="Funcionarioid"
			type="long"
		>
			<generator class="vm" />
		</id>	
		<property
			column="nome"
			name="Nome"
			not-null="true"
			type="string"
		 />
		<property
			column="senha"
			name="Senha"
			not-null="true"
			type="string"
		 />
		<property
			column="login"
			name="Login"
			not-null="true"
			type="string"
		 />
	</class>
</hibernate-mapping>

na classe Funcionario deve ter

get/setLogin();
get/setSenha();
get/setNome();
get/setFuncionarioid();
G

Boa tarde MaikonAraujo!!! Obrigado pela atenção!

Se entendi bem a opção “Access” que temos na tag “Property”
me permite mudar isso, creio que o que vc me sugeriu seria o padrão,
so que o “get” da minha classe “Cliente” me retorna uma classe do tipo “Membro” e é desta classe “Membro” que eu quero usar os métodos “get e set”.

Andei pesquisando sobre isso e vi na documentação a interface “UserTypes” mas creio que ainda não é o que eu quero,
vi também a opção “Access” citada acima que pode ser configurada
como “Property|Field|Class” (mais ou menos assim), talvez a última
opção seja o que eu preciso mas ainda não consegui usar.

maikonaraujo

Acho que o que vc perguntou foi mesmo um pouco diferente do que eu expliquei, se eu entendi bem, por que vc não mapea o relacionamento entre a classe Membro e a classe Cliente?? Ai sim vc teria uma um GetMembroSet()
tipo:

<set inverse="true" name="MembroSet">
			<key column="membro_id" />
			<one-to-many class="Membro" />			
</set>

Espero ter me aproximado mais da sua dúvida.

G

Valeu!!!
vou estudar um pouco o que vc me disse,
se é realmente o que eu estou precisando eu volto a responder.

Obrigado!

G

eh maikonaraujo!!!
não é ainda o que estou precisando…
se entendi bem o que vc me passou seria por exemplo
ter um Produto com um conjunto de Códigos de Barra
ou um Cliente com um conjunto de Números Telefônicos.

A minha classe Membro conterá somente o valor do meu campo
com algumas informações a mais como a descrição do campo etc.

Exemplo:

Para settar os valores pra minha classe cliente

<code



Cliente cliente = new Cliente();

cliente.cliente_id.setIntValue(1);

cliente.nome.setStrValue(nome do cliente);

/code>

para pegar os valores da minha classe cliente…

<code



System.out.println(cliente.cliente_id.getIntValue());

System.out.println(cliente.nome.getStrValue());

/code>

ou seja…
pra eu passar o valor do campo “nome” para a tabela no banco de dados eu teria que usar o método
“getStrValue” da minha classe “Membro”,
isso é que está sendo o meu problema, eu preciso fazer o Hibernate pegar o valor do campo atravez deste método, lembrando que o tipo que eu defini no arquivo XML é “type=string” e não “type=Membro”.

G

Desculpe-me pela tentativa de organizar o código.

maikonaraujo

Entendi… Mas vc tem que ver até onde estão as regras de negócio e o conteudo do banco. O Hibernate é para persistencia, ele mapea os relacionamentos das entidades do banco para os relacionamentos dos objetos. A solução que eu poderia te sugerir é , ou mapear os dados dos membros no banco e isto seria utilizar aquele mapeamento anterior, mas se isto não atende e os outros dados dos Membros não estão no banco é porque ele não pode ser mapeado pelo hibernate, ai vc precisa montar outras entidades no mapeamento e encapsular elas na sua classe membro da forma que te for mais conveniente. Tenta rever seu modelo, ae vc pode ter alguma idéia de como conciliar uma coisa com a outra.
E se tiver alguma idéia legal posta ai pra gente ver!

G

Ok!!!
vou dar uma estudada no meu projeto e
assim que eu tiver isso definido postarei pra vc dar uma olhada.

Valeu!!!

Criado 3 de abril de 2005
Ultima resposta 3 de abr. de 2005
Respostas 8
Participantes 2