Dificuldade com persistencia de dados

2 respostas
lincolngadea

Olá pessoal,

Meu problema atual é o seguinte:

Estou usando a persistencia de dados para criar algumas tabelas no meu aplicativo. até ai tudo bem. O problema é que tenho algumas tabelas relacionadas entre si e preciso criar um JoinColumn no aplicativo para poder criar os relacionamentos na classe ok. criei o Join mas não funfou...

o meu código está assim:
@Entity
@Table(name = "membros", catalog = "glinksysdb", schema = "")
@NamedQueries({
    @NamedQuery(name = "Membros.findAll", query = "SELECT m FROM Membros m"),
    @NamedQuery(name = "Membros.findByMemCod", query = "SELECT m FROM Membros m WHERE m.memCod = :memCod"),
    @NamedQuery(name = "Membros.findByGCod", query = "SELECT m FROM Membros m WHERE m.gCod = :gCod"),
    @NamedQuery(name = "Membros.findByBairroCod", query = "SELECT m FROM Membros m WHERE m.bairroCod = :bairroCod"),
    @NamedQuery(name = "Membros.findByCidCod", query = "SELECT m FROM Membros m WHERE m.cidCod = :cidCod"),
    @NamedQuery(name = "Membros.findByDizCod", query = "SELECT m FROM Membros m WHERE m.dizCod = :dizCod"),
    @NamedQuery(name = "Membros.findByInscCod", query = "SELECT m FROM Membros m WHERE m.inscCod = :inscCod"),
    @NamedQuery(name = "Membros.findByRuaCod", query = "SELECT m FROM Membros m WHERE m.ruaCod = :ruaCod"),
    @NamedQuery(name = "Membros.findByMemNome", query = "SELECT m FROM Membros m WHERE m.memNome = :memNome"),
    @NamedQuery(name = "Membros.findByMemDataCad", query = "SELECT m FROM Membros m WHERE m.memDataCad = :memDataCad"),
    @NamedQuery(name = "Membros.findByMemEmail", query = "SELECT m FROM Membros m WHERE m.memEmail = :memEmail"),
    @NamedQuery(name = "Membros.findByMemMsn", query = "SELECT m FROM Membros m WHERE m.memMsn = :memMsn"),
    @NamedQuery(name = "Membros.findByMemDataNiver", query = "SELECT m FROM Membros m WHERE m.memDataNiver = :memDataNiver"),
    @NamedQuery(name = "Membros.findByProfCod", query = "SELECT m FROM Membros m WHERE m.profCod = :profCod"),
    @NamedQuery(name = "Membros.findByMemDataBat", query = "SELECT m FROM Membros m WHERE m.memDataBat = :memDataBat"),
    @NamedQuery(name = "Membros.findByCivilCod", query = "SELECT m FROM Membros m WHERE m.civilCod = :civilCod"),
    @NamedQuery(name = "Membros.findByMemComplemento", query = "SELECT m FROM Membros m WHERE m.memComplemento = :memComplemento"),
    @NamedQuery(name = "Membros.findByMemCelular", query = "SELECT m FROM Membros m WHERE m.memCelular = :memCelular"),
    @NamedQuery(name = "Membros.findByMemTelfixo", query = "SELECT m FROM Membros m WHERE m.memTelfixo = :memTelfixo"),
    @NamedQuery(name = "Membros.findByMemTelrec", query = "SELECT m FROM Membros m WHERE m.memTelrec = :memTelrec")})
public class Membros implements Serializable {
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "MEM_COD")
    private Integer memCod;
    
    @JoinColumn(name = "G_COD", referencedColumnName= "G_COD")
    @ManyToOne
    private Membros gCod;
.....

quando faço isso eu vou na minha tabela e o caminho da coluna, onde tinha ${Gcod} eu coloquei ${Gcod.gNome}

o erro que é gerado é esse aqui:

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at oracle.toplink.essentials.internal.helper.DatabaseField.equals(DatabaseField.java:159)
at oracle.toplink.essentials.internal.helper.DatabaseField.equals(DatabaseField.java:182)
at java.util.HashMap.get(HashMap.java:305)
at oracle.toplink.essentials.mappings.OneToOneMapping.getFieldClassification(OneToOneMapping.java:425)
at oracle.toplink.essentials.mappings.OneToOneMapping.getFieldClassification(OneToOneMapping.java:433)
at oracle.toplink.essentials.mappings.OneToOneMapping.getFieldClassification(OneToOneMapping.java:433)
at oracle.toplink.essentials.mappings.OneToOneMapping.getFieldClassification(OneToOneMapping.java:433)
at oracle.toplink.essentials.mappings.OneToOneMapping.getFieldClassification(OneToOneMapping.java:433)
at oracle.toplink.essentials.mappings.OneToOneMapping.getFieldClassification(OneToOneMapping.java:433)
at oracle.toplink.essentials.mappings.OneToOneMapping.getFieldClassification(OneToOneMapping.java:433)
at oracle.toplink.essentials.mappings.OneToOneMapping.getFieldClassification(OneToOneMapping.java:433)
at oracle.toplink.essentials.mappings.OneToOneMapping.getFieldClassification(OneToOneMapping.java:433)
at oracle.toplink.essentials.mappings.OneToOneMapping.getFieldClassification(OneToOneMapping.java:433)

2 Respostas

thiago.correa

a coluna referenciada não seria Membros.gCod ???

lincolngadea

Olá Thiago,

Para vc entender melhor vou explicar como funciona o relacionamento.

Tenho duas tabelas relacionadas entre si com autorelacionamento, feitoa através da ferramenta MysqlAdministrator (falo que é auto-relacionamento pq ela não tem nenhuma opção para dizer se é Many to One, One to Many …,

nesse a tabela mestre que é a tabela de membros tem um campo G_COD, esse campo está implicito na linha 34, onde tem name = “G_COD”, dai tem um relacionamento com outra tabela chamada G12 que tb tem um campo G_COD. Como já existe um indice na tabela de membros que referencia a tabela G12, criei uma referencia direto no aplicativo apontando para o G_COD.

De qualquer forma fiz o que vc me orientou, o erro para de acontecer mas como ele esta buscando uma referencia dentro da própria tabela (pelo que entendi), ele não me retorna o código da outra tabela que está relacionada. tentei fazer tambem colocando g12.G_COD e tb não funcionou…

Criado 27 de setembro de 2010
Ultima resposta 27 de set. de 2010
Respostas 2
Participantes 2