Problemas com relacionamentos hierárquicos em HQL e SQL

4 respostas
M

Seguinte pessoa eu tenho que fazer um sistema onde tem aqueles esquemas de marketing multinivel tipo herbalife, essas coisas onde um associados tem relacionamento com outros usuarios e tem as paradas de niveis e tal to tentando fazer isso usando hibernate 3.0 + vraptor. e to apanhando.

Então tenho a classes Associado

Associado

@Entity
public class Associado{
    
    // Fields
    @Id
    @GeneratedValue
    private Long idAssociado;
    private Long idIndicado;
  
   //Relacionamento com a classe pessoafisica
    @OneToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="id_pessoafisica",insertable=true, updatable=true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Pessoafisica Pessoafisica;

Setter and Getters
}

Então idAssociado e o registro Pai e idIndicado e o filho.

Dessa forma eu consigo cadastrar, esta funcionando mais quando tento fazer uma consulta usando recursividade nao consigo fazer! na realidade eu não sei como fazer no hql e nem usando sql nativo...

Quanto ao relacionamento de IdAssociado possue um registro com idIndicado isso seria o correto. poderia ser assim? ou tem como fazer de uma outra forma.

Se for assim o associado tem tambem um relacionamento com pessoafisica que possue o nome do associados (dados pessoais)

na hora de fazer uma consulta eu nao consigo!!!

Se alguem tiver algum exemplo meu email e [email removido]

EDIT - Evite usar títulos não-descritivos de seu problema.


Galera alguem me ajuda ai ja to a quase 2 meses e meio tentando!!!! acho que sou meio lesado so pode

4 Respostas

P

Seria mais correto, ao invés de colocar la um idIndicado, colocar um objeto Associado, já que o indicado tem que ser um associado né.

@Id   
    @GeneratedValue   
    private Long idAssociado;   
    private Associado indicado;

A, e deixa eu te perguntar… todo associado eh uma pessoa fisica? se for, coloca os atributos de pessoa fisica na classe associado mesmo… nao tem porque exagerar assim na OO. Minha opinião.

Se puder ser outro tipo de pessoa, ai o atributo não deveria ser PessoaFisica, mas sim Pessoa (genérica) da qual extenderiam as classes PessoaFisica e PessoaJuridica e o que mais quisesse.

M

blz vou colocar os dados pessoa fisica junto entaum outra questa como vou fazer as consulta se nao for abusar muito pq prescisaria saber quem e indicado de com com os nome dos indicados tambem, e que eu estou usando displaytags e nao sei direito como fazer!!! pode dar uma forca ai

M

OI então sobre a classe pessoafisica vou deixar separado mesmo estou conseguindo enchergar blz desse jeito e que existem outras classes que usaram ela tambem!!! agora estou tendo dificuldades em gravar os registro , da o seguinte erro

12:39:23,857 DEBUG [BasicIntrospector   ] Parameter associado.idIndicado will be used on field associado
12:39:23,857 DEBUG [JPathExecutor       ] ready to use parameter [associado, idIndicado]
12:39:23,872 DEBUG [BasicIntrospector   ] Unable to find converter for br.com.bolsocard.modelo.Associado
org.vraptor.converter.ConversionException: Unable to find converter for br.com.bolsocard.modelo.Associado
	at org.vraptor.converter.SimpleConverterManager.findConverter(SimpleConverterManager.java:94)
	at org.vraptor.converter.SimpleConverterManager.convert(SimpleConverterManager.java:49)
	at org.vraptor.reflection.JPathExecutor.convert(JPathExecutor.java:215)
	at org.vraptor.reflection.JPathExecutor.internalSet(JPathExecutor.java:195)
	at org.vraptor.reflection.JPathExecutor.set(JPathExecutor.java:102)
	at org.vraptor.introspector.BasicIntrospector.readParameters(BasicIntrospector.java:81)
	at org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:98)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:41)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:58)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at br.com.bolsocard.main.DaoInterceptor.intercept(DaoInterceptor.java:16)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:38)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:98)
	at org.vraptor.core.DefaultController.execute(DefaultController.java:46)
	at org.vraptor.VRaptorServlet.service(VRaptorServlet.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Unknown Source)

A classe AssociadoLogic

esta assim

public void armazena(Associado associado, Pessoafisica Pessoafisica, Pessoa pessoa) {
	pessoa.setDtcadastro(hoje);
	this.daofactory.beginTransaction();
	this.daofactory.getPessoaDao().adiciona(pessoa);
	this.pessoa = daofactory.getPessoaDao().procura(pessoa.getIdPessoa());
	Pessoafisica.setPessoa(this.pessoa);
	this.daofactory.getPessoafisicaDao().adiciona(Pessoafisica);
	this.pessoafisica = daofactory.getPessoafisicaDao().procura(Pessoafisica.getIdPessoafisica());
	associado.setPessoafisica(this.pessoafisica);
	this.daofactory.getAssociadoDao().adiciona(associado);
	this.daofactory.commit();
    }

O meu Dao esta assim

public void adiciona(T objeto) {
		this.session.save(objeto);
	}
M

Ai galera so + uma ajudinha blz!

Criado 7 de novembro de 2008
Ultima resposta 11 de nov. de 2008
Respostas 4
Participantes 2