Problemas com o Export Java no JUDE

11 respostas
A

Estou tentando exportar código a partir do meu diagrama de classes do Jude.
A princípio nenhum problema, escolho o diretório, seleciono as classes que quero exportar e é gerado código na pasta selecionada.

Só que quando abro qualquer classe que tenha um relacionamento 1…n ou m…n ele gera errado.
No exemplo a classe categoria tem várias questoes. O Jude gera na classe Questao um campo categoria e classe Categoria um campo questao, onde esse campo questao da classe categoria não deveria exixtir. Ou seja, aparentemente ele tratando errado o relacionamento e gerando duplicado.

E o mais estranho é que só gera errado em alguns casos, em outros funciona perfeitamente.

public class Categoria {
 
	private Integer id;
	 
	private String nome;
	 
	private Questao questao;
	 
}
public class Questao {
 
	private Integer id;
	 
	private String descricao;
	 
	private Categoria categoria;
	 
}

Alguem aí já teve esse problema e tem alguma idéia de como solucioná-lo?

Vlw.

Almo

11 Respostas

C

pode colar como que está o seu diagrama ?

A

Essa é uma parte do diagrama que dá problema.
[img]http://img442.imageshack.us/img442/1748/diagramaow5.th.jpg[/img]

[url]http://img442.imageshack.us/img442/1748/diagramaow5.jpg[/url]
Os códigos gerados são:

import java.util.Date;

public class Candidato extends PessoaFisica {
 
	private String pis;
	 
	private String serieCTPS;
	 
	private String numeroCTPS;
	 
	private String categoriaCNH;
	 
	private String pretensaoSalario;
	 
	private String pretensaoValorHora;
	 
	private String empresa1;
	 
	private Date dataAdmissao1;
	 
	private String funcao1;
	 
	private Date dataDemissao1;
	 
	private String salario1;
	 
	private String historico1;
	 
	private String empresa2;
	 
	private Date dataAdmissao2;
	 
	private String funcao2;
	 
	private Date dataDemissao;
	 
	private String salario2;
	 
	private String historico2;
	 
	private String empresa3;
	 
	private Date dataAdmissao3;
	 
	private String funcao3;
	 
	private Date dataDemissao3;
	 
	private String salario3;
	 
	private String historico3;
	 
	/**
	 *senha do candidato para que possa alterar seu curriculo depois que este for submetido
	 */
	private String senha;
	 
	/**
	 *Representa o status do candidato no banco.
	 *Quando inativo indica que o candidato foi contratado 
	 *pela empresa que disponibilizou a vaga para a 
	 *qual ele estava concorrendo. 
	 */
	private Boolean status;
	 
	private Respostas respostas;
 
}
EDIT: Eu havia colocado o trecho de código errado
public class Respostas {
 
	private Integer id;
	 
	private Boolean resposta;
	 
}
/EDIT
public class Questoes {
 
	private Integer id;
	 
	private String descricao;
	 
	private Categoria categoria;
	 
	private Respostas respostas;
	 
}
public class Categoria {
 
	private Integer id;
	 
	private String nome;
	 
	private Questoes questoes;
	 
}
C

Certo, era isso mesmo que pensei que tu estivesse fazendo… seguinte…
Existem relacionamentos ---------> e -----------------, o segundo, não sao guardadas nenhuma referencia de ambos os lados.
No primeiro a classe que está sendo apontada A--------> B, ele tem uma referencia de B, mas B não irá ter uma referencia de A… agora voltando a sua duvida de 1 para N, vc pode fazer… clica com o botao direito e vai em multiplicit( ou algo assim ), ai tu coloca em uma ponta da flexa, 1 e na outra *. OK ?

A

Na relação Questoes -> Categoria, eu uso o primeiro tipo de flecha, não deveria então ter uma referencia de Categoria dentro de Questoes somente?
É que nesse caso ele está gerando também a referencia de questoes dentro de Categoria.

C

Então faça o seguinte… se tu está mesmo usando a flecha -----------> então tu vai nas propriedades da sua classe, e lá tem um item… relacionamento ou associações, agora eu não lembro de cabeça, apaga todos que tem lá, e depois novamente tu coloca a flexa que vai funcionar. OK ?

A

Esse negócio de apagar deu certo, mas essa é a única forma? Apagar relação por relação e refazer?
É que o diagrama todo tem cerca de 90 classes, onde metade deve estar dando erro. Não existe alguma outra forma de fazer o código ser gerado corretamente?

Agradeço desde já.

Almo.

A

Se eu criar o diagrama e gerar o código logo em seguida, sem salvar nem fechar, ele gera corretamente o código.
Mas seu eu fechar o Jude e em seguida abrir novamente, ele gera errado.
Nas relações que eu criar usando “Association Class”,antes de fechar, ele gera na classe de associação relações para as duas classes que participam da relação, e depois de fechar ele não gera nenhuma das duas relações e gera nas duas classes que participam da relação relação com a classe de associação.
E quando eu uso "Aggregation to navigable Association (o------>) ", antes de fechar, ele gera na o relacionamento classe que estiver “do lado que tem a bolinha” ele gera uma relação para a classe “do lado que tem a flexinha”. Depois de fechar o jude ele gera nas duas classes um relacionamento para a outra.

C

Tu tem que olhar nas propriedades e ir vendo as associacoes que ele tem, assim tu controla isos tranquilamente, ok ?

A

Tanto antes de fechar o Jude quanto depois quando eu abro novamente o que aparece em"association" pra cada classe continua igual (ver imagem), mas o código gerado depois de fechar está totalmente diferente do primeiro.

ANTES de FECHAR [img]http://img488.imageshack.us/img488/965/antesdefecharvc0.th.jpg[/img]
public class Jaspion {
 
	private Integer id;
	 
	private Truco truco;
	 
}
public class Teste {
 
	private Integer id;
	 
}
public class TesteTruco {
 
	private Integer id;
	 
	private String lala;
	 
	private Truco truco;
	 
	private Teste teste;
	 
}
public class Truco {
 
	private Integer id;
	 
}
DEPOIS de FECHAR [img]http://img129.imageshack.us/img129/1949/depoisdefecharrj5.th.jpg[/img]
public class Jaspion {
 
	private Integer id;
	 
	private Truco truco;
	 
}
public class Teste {
 
	private Integer id;
	 
	private TesteTruco testeTruco;
	 
}
public class TesteTruco {
 
	private Integer id;
	 
	private String lala;
	 
}
public class Truco {
 
	private Integer id;
	 
	private TesteTruco testeTruco;
	 
	private Jaspion jaspion;
	 
}

VC tem alguma idéia de porque isso acontece depois que fecho o jude?

C

Rapaz,

eu também tenho o Jude, e mesmo sendo a última versão (3.2.1), acontece a mesma coisa.

O Jude não está respeitando a navegabilidade das associações. Não cheguei a reparar se este erro ocorre em outras versões. Acho que vou testar pra verificar.

Qual versão vc está usando atualmente?

C

3.2

Criado 27 de fevereiro de 2007
Ultima resposta 4 de abr. de 2007
Respostas 11
Participantes 3