Bom dia!
Pessoal, preciso muito de ajuda. Já estou tentando resolver esse problema há 3 dias.
Estou com problema ao executar minha aplicação com o hibernate 3.2. Fiz um teste com o eclipselink e funciona, mas preciso fazer funcionar no hibernate.
Tenho as seguintes tabelas:
CREATE TABLE IntProPromocao
idProcesso NUMERIC(10) NOT NULL,
codOperacao CHAR(1) COLLATE Latin1_General_CI_AS NOT NULL,
codPromocao NUMERIC(10) NOT NULL,
codTipoPromocao NUMERIC(3) NOT NULL,
descPromocao VARCHAR(40) COLLATE Latin1_General_CI_AS NULL,
dataInicio DATETIME NULL,
dataFim DATETIME NULL
) ON [PRIMARY]
ALTER TABLE [dbo].[IntProPromocao] WITH NOCHECK ADD
CONSTRAINT [PK_IntProPromocao] PRIMARY KEY CLUSTERED
(
[idProcesso],[codOperacao],[codPromocao]
) ON [PRIMARY]
CREATE TABLE IntProCategoriaCliente (
idProcesso NUMERIC(10) NOT NULL,
codOperacao CHAR(1)COLLATE Latin1_General_CI_AS NOT NULL,
codCategoria NUMERIC(10) NOT NULL,
descCategoria VARCHAR(20) COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY]
ALTER TABLE [dbo].[IntProCategoriaCliente] WITH NOCHECK ADD
CONSTRAINT [PK_IntProCategoriaCliente] PRIMARY KEY CLUSTERED
(
[idProcesso],[codOperacao],[codCategoria]
) ON [PRIMARY]
CREATE TABLE IntProPromocaoCategoria (
idProcesso NUMERIC(10) NOT NULL,
codOperacao CHAR(1) COLLATE Latin1_General_CI_AS NOT NULL,
codCategoria NUMERIC(10) NOT NULL,
codPromocao NUMERIC(10) NOT NULL
) ON [PRIMARY]
ALTER TABLE [dbo].[IntProPromocaoCategoria] WITH NOCHECK ADD
CONSTRAINT [PK_IntProPromocaoCategoria] PRIMARY KEY CLUSTERED
(
[idProcesso],[codOperacao],[codPromocao],[codCategoria]
) ON [PRIMARY]
ALTER TABLE [dbo].[IntProPromocaoCategoria] ADD CONSTRAINT FK_IntProPromocaoCategoria_1
FOREIGN KEY (idProcesso, codOperacao, codPromocao)
REFERENCES IntProPromocao (idProcesso, codOperacao, codPromocao)
ON DELETE CASCADE
ON UPDATE CASCADE
ALTER TABLE [dbo].[IntProPromocaoCategoria] ADD CONSTRAINT FK_IntProPromocaoCategoria_2
FOREIGN KEY (idProcesso, codOperacao, codCategoria)
REFERENCES IntProCategoriaCliente(idProcesso, codOperacao, codCategoria)
ON DELETE CASCADE
ON UPDATE CASCADE
Estou usando JPA pra fazer o mapeamento usando @JoinTable. Fiz da seguinte maneira:
Classe Promocao.java
@ManyToMany
@JoinTable(name="IntProPromocaoCategoria",
joinColumns={
@JoinColumn(name="idProcesso", referencedColumnName="idProcesso", insertable=false, updatable=false),
@JoinColumn(name="codOperacao", referencedColumnName="codOperacao", insertable=false, updatable=false),
@JoinColumn(name="codPromocao", referencedColumnName="codPromocao", insertable=false, updatable=false)
},
inverseJoinColumns={
@JoinColumn(name="idProcesso", referencedColumnName="idProcesso", insertable=false, updatable=false),
@JoinColumn(name="codOperacao", referencedColumnName="codOperacao", insertable=false, updatable=false),
@JoinColumn(name="codCategoria", referencedColumnName="codCategoria", insertable=false, updatable=false)
})
private List<CategoriaCliente> categorias;
Com esse mapeamento dá o seguinte erro:
javax.persistence.PersistenceException: org.hibernate.MappingException: Repeated column in mapping for collection: com.itautec.siac.integracao.promocao.entidade.Promocao.categorias column: idProcesso
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:698)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:127)
at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:264)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.jboss.ejb3.ServiceDelegateWrapper.startService(ServiceDelegateWrapper.java:102)
O problema é que a tabela de associação IntProPromocaoCategoria usa 2 campos (o mesmo) de associação para as tabelas IntProPromocao e para a IntProCategoriaCliente, dando coluna duplicada.
Já fiz engenharia reversa criando as classes a partir do banco de dados e ele cria exatamente dessa maneira. Não consigo achar o problema. Se alguém puder me ajudar ficarei muito grato!
Abs,
Daniel