Você deve está se perguntando qual a conexão dessas frases, aparentemente perdidas, com a expressão logo acima, no início desse pequeno artigo. Pois bem, na verdade isso tudo é justamente uma tentativa de frisar o quanto o que é novo nos comove e envolve. E nos faz tomar decisões precipitadas!
Explicando melhor e tecnicamente: Eu estava envolvido em alguns projetos Java SE utilizando o Netbeans 5.5. Resisti verdadeiramente ao surgimento das versões 6.0, 6.1 e outras milestones até que for fim foi lançado a versão 6.5 do Netbeans. Instalei, fiz alguns testes e resolvi utilizá-la. Algumas semanas foram se passando e eu me sentia cada vez mais confiante até que resolvi trabalhar apenas com essa versão nova. Equivocadamente resolvi também desinstalar o 5.5.
Em um desses projetos Java SE eu utilizo a JPA através da implementação da Oracle, o TopLink. Ocorre que algumas pesquisas mais complexas que trabalhavam com coleções e subcoleções não estavam funcionando. Como as nossas janelas de pesquisa oferecem diversas opções de filtro, eu não fui capaz de testar tudo. O meu cliente testou!
Em relação ao relacionamento dos POJO's, eu tinha a seguinte situação:
@Entity
@Table(name = "pessoa")
public class Pessoa implements Serializable {
...
@OneToMany(mappedBy="codPes", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List
...
}
@Entity
@Table(name = "fone")
public class Fone implements Serializable {
...
@OneToMany(mappedBy="numSeqFone", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List
@JoinColumn(name = "COD_PESSOA", referencedColumnName = "COD_PESSOA")
@ManyToOne
private Pessoa codPes;
...
}
@Entity
@Table(name = "fone_contato")
public class FoneContato implements Serializable {
...
@JoinColumn(name = "NUM_SEQ_FONE", referencedColumnName = "NUM_SEQ")
@ManyToOne
private Fone numSeqFone;
...
}
Eu citei os POJO's Pessoa, Fone e FoneContato exatamente porque era uma pesquisa feita em seus dados que estava gerando o erro abaixo:
...
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager at oracle.toplink....cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:209)
...
Error compiling the query [SELECT DISTINCT p FROM Pessoa p WHERE (EXISTS(SELECT f FROM p.fone f WHERE f.fone = :fone) or EXISTS(SELECT fc FROM p.fone fc WHERE fc.foneContato.fone = :fone))], line 1, column 136: invalid navigation expression [fc.foneContato.fone], cannot navigate collection valued association field [foneContato].
...
A versão do TopLink que vem no Netbeans 6.5 era a 2.0.1 (Build b09d-fcs (12/06/2007)), enquanto que no Netbeans 5.5 era a 2006.8 (Build 060830).
Então, com o TopLink 2.0.1 qualquer pesquisa em tipos coleções de POJO's – List - gerava o erro: cannot navigate collection valued association field. Tentei inclusive baixar a última versão dessa biblioteca direto no site da Oracle (versão 2 e build 31) e o problema persistia. Não teve jeito, para resolver definitivamente o problema, eu tive que remover as bibliotecas originais do TopLink, que eram instaladas no NetBeans 6.5, e instalar a versão que vinha junto com o 5.5. Nesse caso, eu tive que reinstalar o Netbeans 5.5 novamente para conseguir copiar a versão anterior do TopLink. Mas, como reconfigurar bibliotecas e tantas outras coisas no Netbeans é muito fácil, no final deu tudo certo. Netbeans 6.5 definitivamente funcionando!
Pois é, a curiosidade e a ansiosidade em usar a última versão do Netbeans me trouxe esses contratempos que me tomaram algum tempo para saná-los.
Nenhum comentário:
Postar um comentário