Referência Circular - Spring

Olá a todos.

    Estou com o seguinte problema:
            A aplicação utiliza Hibernate + Spring + Struts, e para as telas utiliza um framework javascript ExtJS.
            Possuo duas entidades: Funcionario e HoraTrabalhada, essas entidades se relacionam, abaixo o código:

            Funcionario.java
           [code]

package com.lpinformatica.sistemaponto.model.schema.administracao;

import java.io.Serializable;
import java.util.Date;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Type;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Scope(“prototype”)
@Component(value = “funcionario”)
@Entity
@Table(name = “FUNCIONARIO”)
public class Funcionario implements Serializable {

/**
 *
 */
private static final long serialVersionUID = 1L;

@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "IDFUNCIONARIO")
private Integer idFuncionario;

@ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "IDCARGO")
private Cargo cargo;

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "IDLOGRADOURO")
private Logradouro logradouro;

@Column(name = "NOME", nullable = false, length = 60)
private String nome;

@Column(name = "DATAADMISSAO", nullable = true)
@Type(type = "date")
private Date dataAdmissao;

@Column(name = "CPF", length = 14, nullable = false)
private String cpf;

@Type(type = "text")
@Column(name = "SENHABIOMETRIA", nullable = true)
private String senhaBiometria;

@Column(name = "RG", length = 10, nullable = false)
private String rg;

@Column(name = "PIS", length = 14, nullable = false)
private String pis;

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST, optional = true)
@JoinColumn(name = "IDUSUARIO", unique = true)
private Usuario usuario;

   // Relacionamento em questão, aparentemente onde o erro está relacionado....
@OneToMany(fetch = FetchType.LAZY, mappedBy = "funcionario")
private Set<HoraTrabalhada> horasTrabalhadas;
   //-----------------------------------------------------------------------------------------

@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "funcionario")
private CargaHorariaFuncionario cargaHorariaFuncionario;

@Column(name = "NUMEROCASA", nullable = true)
private Integer numeroCasa;

    // Abaixo estão os construtores de métodos geters e seters
   [/code]


           HoraTrabalhada.java
    [code]
    package com.lpinformatica.sistemaponto.model.schema.administracao;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Type;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Scope(“prototype”)
@Component(value = “horaTrabalhada”)
@Entity
@Table(name = “HORATRABALHADA”)
public class HoraTrabalhada implements Serializable {

/**
 *
 */
private static final long serialVersionUID = 1L;

@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "IDHORATRABALHADA")
private Integer idHoraTrabalhada;

   //Método em questão, onde aparentemente o erro está relacionado
@ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "IDFUNCIONARIO")
private Funcionario funcionario;
    //-------------------------------------------------------------------------------------------

@Column(name = "HORAENTRADA", nullable = false)
@Type(type = "time")
private Date horaEntrada;

@Column(name = "HORASAIDAINTERVALO", nullable = true)
@Type(type = "time")
private Date horaSaidaIntervalo;

@Column(name = "HORAENTRADAINTERVALO", nullable = true)
@Type(type = "time")
private Date horaEntradaIntervalo;

@Column(name = "HORASAIDA", nullable = true)
@Type(type = "time")
private Date horaSaida;

@Column(name = "DATAPONTO", nullable = false)
@Type(type = "date")
private Date dataPonto;
    
    //Abaixo estão os contrutores e métodos
   [/code]


   A aplicação inicia normalmente, mas quando tento cadastrar um funcionário utilizando o hibernate ocorre uma excessao:

   [code]
   28/01/2009 15:17:17 org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet default threw exception
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘funcionario’: Requested bean is currently in creation: Is there an unresolvable circular reference?
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:224)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByName(AbstractAutowireCapableBeanFactory.java:1029)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:977)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:283)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByName(AbstractAutowireCapableBeanFactory.java:1029)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:977)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:283)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:881)
at com.lpinformatica.wframe.web.action.TableInterceptor.intercept(TableInterceptor.java:166)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
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:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
[/code]

    Conforme a exception ocorre um erro ao tentar criar o bean "funcionario". Já fiz diversas busca na web sobre esta questão, mas não consegui encontrar nada que resolvesse meu problema.
    Agradeço à todos pela ajuda dos colegas.

Abraço.

Você está usando o spring, para criar beans dos seus pojos ?

Tipo:

<bean class="com.lpinformatica.sistemaponto.model.schema.administracao.Funcionario">
</bean>

Se estiver, posta o código xml ai.

Acabei resolvendo aqui…

       Se tratava de uma referência circular onde um bean estava chamando o outro...

Poste o código da sua solução (como era antes e como ficou depois).