quarta-feira, 18 de abril de 2012

Re: [java-br] Erro ao mapear ManyToMany com JPA 2 EclipseLink

·

 

Boa tarde Marcus.
Então, depende de como tento mapear... se faço isso:
@JoinTable(name = "tbl_contatos_produtos_comercial", @JoinColumn(name = "idclientecomercial", referencedColumnName = "idclientecomercial"), inverseJoinColumns = {        @JoinColumn(name = "idcontatoproduto", referencedColumnName = "idcontatoproduto")})
Caused by: Exception [EclipseLink-7220] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.ValidationExceptionException Description: The @JoinColumns on the annotated element [field contatosProdutos] from the entity class [class br.com.arandanet.entidade.ContatosProdutosComercial] is incomplete. When the source entity class uses a composite primary key, a @JoinColumn must be specified for each join column using the @JoinColumns. Both the name and the referencedColumnName elements must be specified in each such @JoinColumn. at org.eclipse.persistence.exceptions.ValidationException.incompleteJoinColumnsSpecified(ValidationException.java:1805) at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.MappingAccessor.getJoinColumnsAndValidate(MappingAccessor.java:575) at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.MappingAccessor.getJoinColumns(MappingAccessor.java:525) at
org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ObjectAccessor.processOneToOneForeignKeyRelationship(ObjectAccessor.java:629) at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ObjectAccessor.processOwningMappingKeys(ObjectAccessor.java:686) at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ManyToOneAccessor.process(ManyToOneAccessor.java:119) at org.eclipse.persistence.internal.jpa.metadata.MetadataProject.processOwningRelationshipAccessors(MetadataProject.java:1432) at org.eclipse.persistence.internal.jpa.metadata.MetadataProject.processStage3(MetadataProject.java:1667) at org.eclipse.persistence.internal.jpa.metadata.MetadataProcessor.processORMMetadata(MetadataProcessor.java:521) at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processORMetadata(PersistenceUnitProcessor.java:526) at
org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1320) ... 45 more

E se faço assim
 @ManyToMany    @JoinTable(name="tbl_contatos_produtos_comercial")    private Set<ContatosProdutos> contatosProdutos;
Na hora que vou dar um SELECT fala que a coluna codcli não existe
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERRO: coluna t0.codcli não existe
Posição: 350
Error Code: 0
Call: SELECT t1.analise, t1.codigofs, t1.codrecusa, t1.comercial, t1.congressista, t1.data_inclusao, t1.marcafs, t1.origem, t1.protocolado, t1.reclamacoes, t1.rodizio, t1.vencimento, t1.codproduto, t1.idcontatoproduto, t1.codcontato, t1.categoria FROM tbl_contatos_produtos_comercial t0, tbl_contatos_produtos t1 WHERE ((t0.idclientecomercial = ?) AND ((t0.codcli = ?) AND ((t0.codproduto = ?) AND ((t1.codcontato = t0.codcontato) AND ((t1.idcontatoproduto = t0.idcontatoproduto) AND (t1.codproduto = t0.codproduto))))))
bind => [3 parameters bound]
Query: ReadAllQuery(name="file:/D:/Sistemas/EJBPrimeFaces/Consulta/dist/gfdeploy/Consulta/Consulta-ejb_jar/_Consulta-ejbPU" referenceClass=ContatosProdutos sql="SELECT t1.analise, t1.codigofs, t1.codrecusa, t1.comercial, t1.congressista, t1.data_inclusao, t1.marcafs, t1.origem, t1.protocolado, t1.reclamacoes, t1.rodizio, t1.vencimento, t1.codproduto, t1.idcontatoproduto, t1.codcontato, t1.categoria FROM tbl_contatos_produtos_comercial t0, tbl_contatos_produtos t1 WHERE ((t0.idclientecomercial = ?) AND ((t0.codcli = ?) AND ((t0.codproduto = ?) AND ((t1.codcontato = t0.codcontato) AND ((t1.idcontatoproduto = t0.idcontatoproduto) AND (t1.codproduto = t0.codproduto))))))")root cause
--- Em qua, 18/4/12, Marcus Paulo <mpaulobr@gmail.com> escreveu:

De: Marcus Paulo <mpaulobr@gmail.com>
Assunto: Re: [java-br] Erro ao mapear ManyToMany com JPA 2 EclipseLink
Para: java-br@yahoogrupos.com.br
Data: Quarta-feira, 18 de Abril de 2012, 14:24

Boa tarde Bruno,

qual o erro que aparece?

--
Abraços
Marcus Paulo
Sun Certified Java Programmer 6 (SCJP)
Fotos: www.flickr.com/photos/marcus-paulo/

2012/4/18 Bruno Rodrigues <brunorodrigues197@yahoo.com.br>

> **
>
>
> Boa tarde grupo.
>
> Novamente estou
> escrevendo por um problema com JPA.
>
> Eu tenho duas tabelas
> que se relacionam many-to-many através de uma terceira tabela. Até
> ai tranquilo, só que ambas as tabelas possuem chave primaria
> compostas.
> Já tentei usando ManyToMany pra ligar direto as duas
> tabelas e criando essa terceira entidade para fazer um ManyToOne e
> depois OneToMany (Como segue o exemplo), mas em todos os casos o
> problema é o mesmo. Ele diz que preciso declarar todas as chaves
> primarias com o JoinColumns, mas eu só tenho uma chave primaria em
> comum nas tabelas, então, quando executo uma consulta dá uma
> Exception dizendo que as outras duas chaves não foram encontradas na
> tabela intermediaria.
>
> Alguém já passou por
> isso e teria algumas ideia?
> Vou escrever as classes
> do cenário e as tabelas do banco seguem a mesma logica.
>
> public class TabelaA
> implements Serializable {
> @EmbeddedIdprotected TabelaAPK
> tabelaAPK;
> @OneToMany(cascade =
> CascadeType.ALL, mappedBy = tabelaA")private List<TabelaC>
> tabelaCList;
>
> … }
>
> public class TabelaAPK
> implements Serializable {
> @Column(name = "ida") private int ida; @Column(name =
> "idoutro") private int
> idoutro; @Column(name =
> "idmaisum") private int
> idmaisum;
>
> … }
>
> O mesmo para a tabela B
>
> public class TabelaB
> implements Serializable {
> @EmbeddedIdprotected TabelaBPK
> tabelaBPK;
> @OneToMany(cascade =
> CascadeType.ALL, mappedBy = tabelaB")private List<TabelaC>
> tabelaCList;
>
> … }
>
> public class TabelaBPK
> implements Serializable {
> @Column(name = "idb") private int idb; @Column(name =
> "idqualquer") private int
> idqualquer; @Column(name =
> "idoutroqualquer") private int
> idoutroqualquer;
>
> … }
>
> E a tabela que une as
> duas
>
> public class TabelaC {
>
> @ManyToOne(fetch=FetchType.LAZY)
>
> @JoinColumn(name="ida", referencedColumnName="ida",
> insertable=false,updatable=false )
> private TabelaA
> tabelaA;
>
> @ManyToOne(fetch=FetchType.LAZY)
>
> @JoinColumn(name="idb",referencedColumnName="idb",insertable=false,updatable=false)
>
> private TabelaB
> tabelaB;
>
> }
>
> [As partes desta mensagem que não continham texto foram removidas]
>

>

[As partes desta mensagem que não continham texto foram removidas]

------------------------------------

Para sair da lista, envie email para: java-br-unsubscribe@yahoogroups.com
Para upload/download de arquivos: http://www.yahoogroups.com/files/java-brLinks do Yahoo! Grupos

[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
Para sair da lista, envie email para: java-br-unsubscribe@yahoogroups.com
Para upload/download de arquivos: http://www.yahoogroups.com/files/java-br
SUPEROFERTA HP 4430s

Quer conhecer gente nova e interessante? Só depende de você.

Não passe mais um Dia dos Namorados sozinho(a). Conheça o Y! Encontros.
.

__,_._,___

0 comentários:

Pague com LPs do Mister Colibri

Pague com LPs do Mister Colibri
Quer comprar celular,Tablet,pen drive, GPS e muito outros produtos e ainda podendo pagar tudo em LPs ?Pois saiba que isso é possível,basta você visitar o site downloadstotal.com e realizar a sua compra com toda tranquilidade e segurança!!!

Hora

Online

Arquivo do Blog