JPA relacionamento OneToOne entre tabelas com chaves compostas

3 respostas
A

Pessoal,

Caiu um projeto em minhas mão que tenho que usar JPA e as tabelas já foram criadas e não podem ser modificadas.

Estou com o seguinte problema:

Já tentei de tudo e não consigo fazer o relacionamento funfar, segue as classes abaixo e o relacionamento é 1 para 1 nas colunas NUMEMP, TIPCOL e NUMCAD, entre as tabelas R034FUN e R034CPL.

Retirei algumas coisas do código que está mais abaixo como import comentários, hashcode e equals e os outros campos dessas tabelas.

Tabela: FichaBasicaColaboradorORM

Chave: FichaBasicaColaboradorORMId id;

Tabela: FichaBasicaColaboradorORMId

Campos chave: Short codigoEmpresa, Short tipoColaborador e Integer cadastroColaborador;
---------------------------------------------------------------------------------------------------------------
Tabela: FichaComplementarColaboradorORM

Chave: FichaComplementarColaboradorORMId id;

Tabela: FichaComplementarColaboradorORMId

Campos chave: Short codigoEmpresa, Short tipoColaborador e Integer cadastroColaborador; --------------------------------------------------------------------------------------------------------------- Classe FichaBasicaColaboradorORM
@Entity
@Table(name = "R034FUN", schema = "PORTORH")
public class FichaBasicaColaboradorORM implements java.io.Serializable {

	private static final long serialVersionUID = 5353177400521561904L;
	
	private FichaBasicaColaboradorORMId id;
	private FichaComplementarColaboradorORM fichaComplementarColaboradorORM;

	@EmbeddedId
	@AttributeOverrides( {
			@AttributeOverride(name = "codigoEmpresa", column = @Column(name = "NUMEMP", nullable = false, precision = 4, scale = 0)),
			@AttributeOverride(name = "tipoColaborador", column = @Column(name = "TIPCOL", nullable = false, precision = 1, scale = 0)),
			@AttributeOverride(name = "cadastroColaborador", column = @Column(name = "NUMCAD", nullable = false, precision = 9, scale = 0)) })
	public FichaBasicaColaboradorORMId getId() {
		return this.id;
	}

	public void setId(FichaBasicaColaboradorORMId id) {
		this.id = id;
	}

	@OneToOne(fetch = FetchType.LAZY, mappedBy = "fichaComplementarColaboradorORMid")
	public FichaComplementarColaboradorORM getFichaComplementarColaboradorORM() {
		return this.fichaComplementarColaboradorORM;
	}

	public void setFichaComplementarColaboradorORM(
			FichaComplementarColaboradorORM fichaComplementarColaboradorORM) {
		this.fichaComplementarColaboradorORM = fichaComplementarColaboradorORM;
	}
}
Classe FichaBasicaColaboradorORMId
@Embeddable
public class FichaBasicaColaboradorORMId implements java.io.Serializable {

	private static final long serialVersionUID = -127453153916377361L;
	private Short codigoEmpresa;
	private Short tipoColaborador;
	private Integer cadastroColaborador;

	public FichaBasicaColaboradorORMId() {
	}

	public FichaBasicaColaboradorORMId(Short codigoEmpresa,
			Short tipoColaborador, Integer cadastroColaborador) {
		this.codigoEmpresa = codigoEmpresa;
		this.tipoColaborador = tipoColaborador;
		this.cadastroColaborador = cadastroColaborador;
	}

	@Column(name = "NUMEMP", nullable = false, precision = 4, scale = 0)
	public Short getCodigoEmpresa() {
		return this.codigoEmpresa;
	}

	public void setCodigoEmpresa(Short codigoEmpresa) {
		this.codigoEmpresa = codigoEmpresa;
	}

	@Column(name = "TIPCOL", nullable = false, precision = 1, scale = 0)
	public Short getTipoColaborador() {
		return this.tipoColaborador;
	}

	public void setTipoColaborador(Short tipoColaborador) {
		this.tipoColaborador = tipoColaborador;
	}

	@Column(name = "NUMCAD", nullable = false, precision = 9, scale = 0)
	public Integer getCadastroColaborador() {
		return this.cadastroColaborador;
	}

	public void setCadastroColaborador(Integer cadastroColaborador) {
		this.cadastroColaborador = cadastroColaborador;
	}
}
Classe FichaComplementarColaboradorORM
@Entity
@Table(name = "R034CPL", schema = "PORTORH")
public class FichaComplementarColaboradorORM implements java.io.Serializable {

	private static final long serialVersionUID = 1753574657071284503L;
	private FichaComplementarColaboradorORMId id;
        private FichaBasicaColaboradorORM fichaBasicaColaboradorORM;

        @EmbeddedId
	@AttributeOverrides( {
			@AttributeOverride(name = "codigoEmpresa", column = @Column(name = "NUMEMP", nullable = false, precision = 4, scale = 0)),
			@AttributeOverride(name = "tipoColaborador", column = @Column(name = "TIPCOL", nullable = false, precision = 1, scale = 0)),
			@AttributeOverride(name = "cadastroColaborador", column = @Column(name = "NUMCAD", nullable = false, precision = 9, scale = 0)) })
	public FichaComplementarColaboradorORMId getId() {
		return this.id;
	}

	public void setId(FichaComplementarColaboradorORMId id) {
		this.id = id;
	}

        @OneToOne(fetch = FetchType.LAZY)
	  @JoinColumns({
	    @JoinColumn(name="NUMEMP", referencedColumnName="NUMEMP"),
	    @JoinColumn(name="TIPCOL", referencedColumnName="TIPCOL"),
	    @JoinColumn(name="NUMCAD", referencedColumnName="NUMCAD")
	  })
	public FichaBasicaColaboradorORM getFichaBasicaColaboradorORM() {
		return this.fichaBasicaColaboradorORM;
	}

	public void setFichaBasicaColaboradorORM(FichaBasicaColaboradorORM fichaBasicaColaboradorORM) {
		this.fichaBasicaColaboradorORM = fichaBasicaColaboradorORM;
	}
}
Classe FichaComplementarColaboradorORMId
@Embeddable
public class FichaComplementarColaboradorORMId implements java.io.Serializable {

	private static final long serialVersionUID = -3934415789494260871L;
	private Short codigoEmpresa;
	private Short tipoColaborador;
	private Integer cadastroColaborador;

	public FichaComplementarColaboradorORMId() {
	}

	public FichaComplementarColaboradorORMId(Short codigoEmpresa,
			Short tipoColaborador, Integer cadastroColaborador) {
		this.codigoEmpresa = codigoEmpresa;
		this.tipoColaborador = tipoColaborador;
		this.cadastroColaborador = cadastroColaborador;
	}

	@Column(name = "NUMEMP", nullable = false, precision = 4, scale = 0)
	public Short getCodigoEmpresa() {
		return this.codigoEmpresa;
	}

	public void setCodigoEmpresa(Short codigoEmpresa) {
		this.codigoEmpresa = codigoEmpresa;
	}

	@Column(name = "TIPCOL", nullable = false, precision = 1, scale = 0)
	public Short getTipoColaborador() {
		return this.tipoColaborador;
	}

	public void setTipoColaborador(Short tipoColaborador) {
		this.tipoColaborador = tipoColaborador;
	}

	@Column(name = "NUMCAD", nullable = false, precision = 9, scale = 0)
	public Integer getCadastroColaborador() {
		return this.cadastroColaborador;
	}

	public void setCadastroColaborador(Integer cadastroColaborador) {
		this.cadastroColaborador = cadastroColaborador;
	}
}

É isso ai pessoal se puderem me ajudar, enviar exemplos ou dicas eu agradeço.

Abraço...

3 Respostas

S

Qual é o problema do relacionamento?
Acontece alguma exception?

Por favor poste o stacktrace…

A

cara,

da uma olhada nesse link ai, pode te dar uma ajuda
http://www.guj.com.br/java/248978-resolvido-duvida-sobre-pk-e-erro-ao-inserir-no-banco-de-dados-usando-pk-gerado-pelo-netbeans

t+

A

samuelom:
Qual é o problema do relacionamento?
Acontece alguma exception?

Por favor poste o stacktrace…

Eu faço um pesquisa na tabela FichaBasicaColaboradorORM pela chave e ele apresenta o seguinte erro:

17:41:42,358 ERROR [STDERR] org.hibernate.TypeMismatchException: Provided id of the wrong type for class com.porto.rh.orm.FichaComplementarColaboradorORM. Expected: class com.porto.rh.orm.FichaComplementarColaboradorORMId, got class com.porto.rh.orm.FichaBasicaColaboradorORMId

at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:109)

at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)

at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:873)

at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:590)

at org.hibernate.type.EntityType.resolve(EntityType.java:412)

at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:139)

at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:877)

at org.hibernate.loader.Loader.doQuery(Loader.java:752)

at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)

at org.hibernate.loader.Loader.doList(Loader.java:2228)

at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)

at org.hibernate.loader.Loader.list(Loader.java:2120)

at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118)

at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1596)

at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)

at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:328)

at com.porto.rh.censofuncionario.dao.FichaBasicaColaboradorDataManager.buscarFichaColaborador(FichaBasicaColaboradorDataManager.java:47)

at com.porto.rh.censofuncionario.dao.FichaBasicaColaboradorDataManager$$FastClassByCGLIB$$51d79b99.invoke()

at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)

at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:628)

at com.porto.rh.censofuncionario.dao.FichaBasicaColaboradorDataManager$$EnhancerByCGLIB$$4c9142d.buscarFichaColaborador()

at com.porto.rh.censofuncionario.service.ColaboradorServiceProvider.buscarDadosColaborador(ColaboradorServiceProvider.java:43)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:585)

at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)

at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)

at $Proxy84.buscarDadosColaborador(Unknown Source)

at com.porto.rh.censofuncionario.action.BuscarDadosColaboradorAction.execute(BuscarDadosColaboradorAction.java:44)

at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)

at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)

at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)

at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)

at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)

at java.lang.Thread.run(Thread.java:595)
Criado 27 de setembro de 2011
Ultima resposta 27 de set. de 2011
Respostas 3
Participantes 3