使用gh-cache时Spring引导循环依赖问题

时间:2016-01-29 05:58:24

标签: spring-boot spring-data-rest

我正在使用spring boot,我想在这里缓存一些数据是我的实体和存储库类

地点实体类:

@Entity
@Table(name = "PLACE_MASTER")
@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Component
public class PlaceMaster extends BaseEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "PLACE_MASTER_ID")
    @JsonView(View.Place.class)
    private long placeMasterId;

    @Column(name = "PLACE_NAME")
    @JsonView(View.Place.class)
    private String placeName;

    @Column(name = "ALT_PLACE_NAME")
    private String alternatePlaceName;

    @Column(name = "PINCODE")
    private String pinCode;

    @Column(name="DISTRICT_NAME")
    private String districtName;

    @ManyToOne (cascade = CascadeType.ALL)
    @JoinColumn(name = "STATE_MASTER_ID")
    private StateMaster stateMaster;

}

州实体类:

@Entity
@Table(name = "STATE_MASTER")
@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
//@ToString
public class StateMaster extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "STATE_MASTER_ID")
    private long stateMasterId;

    @Column(name = "STATE_NAME")
    private String stateName;

    @Column(name = "STATE_CODE")
    private String stateCode;

    @OneToMany(mappedBy = "stateMaster", cascade = CascadeType.ALL)
    private List<PlaceMaster> placeMaster = new ArrayList<PlaceMaster>();
}


public interface PlaceMasterRepository extends JpaRepository<PlaceMaster, Long> {

   @Override
   @Cacheable("places")
   public List<PlaceMaster> findAll();

}

bootstrap应用程序类:

@SpringBootApplication
@EnableCaching
@EnableAsync
@EnableTransactionManagement
public class myApplication {

   @Autowired
   private PlaceMasterRepository placeMasterRepository;

public static void main(String[] args) throws Throwable {
        SpringApplication.run(GoyaanaApplication.class, args);
    }
}

当我运行spring boot应用程序时,我收到以下错误。是否由于双向依赖性。请帮忙

引起:org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名为'entityManagerFactory'的bean时出错:请求的bean当前正在创建:是否存在无法解析的循环引用?     在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:347)     在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)     在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)     在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)     在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)

1 个答案:

答案 0 :(得分:0)

通常最好避免bean之间的循环依赖关系,例如:移动@EnableCaching@EnableAsync@EnableTransactionManagement分隔@Configuration类。

如果无法实现,可以通过在@Autowired bean上添加@Lazy注释来解决这个问题。这将创建一个将在运行时解析的惰性代理。这有一个警告 - 如果连接正确,您无法确定应用程序的开始。

@Lazy
@Autowired
private PlaceMasterRepository placeMasterRepository;

有关详细信息,请参阅Spring documentation