我正在使用JPA开发Spring Boot v1.4.2.RELEASE应用程序。
我定义了存储库接口和实现
ARepository
@Repository
public interface ARepository extends CrudRepository<A, String>, ARepositoryCustom, JpaSpecificationExecutor<A> {
}
ARepositoryCustom
@Repository
public interface ARepositoryCustom {
Page<A> findA(findAForm form, Pageable pageable);
}
ARepositoryImpl
@Repository
public class ARepositoryImpl implements ARepositoryCustom {
@Autowired
private ARepository aRepository;
@Override
public Page<A> findA(findAForm form, Pageable pageable) {
return aRepository.findAll(
where(ASpecs.codeLike(form.getCode()))
.and(ASpecs.labelLike(form.getLabel()))
.and(ASpecs.isActive()),
pageable);
}
}
一项服务 的 AServiceImpl
@Service
public class AServiceImpl implements AService {
private ARepository aRepository;
public AServiceImpl(ARepository aRepository) {
super();
this.aRepository = aRepository;
}
...
}
我的应用程序不会以消息开头:
*************************** APPLICATION FAILED TO START *************************** Description: The dependencies of some of the beans in the application context form a cycle: | aRepositoryImpl └─────┘中描述的所有步骤
请帮忙!
劳伦
答案 0 :(得分:5)
对原始问题有一个简单的解决方法: 只需从ARepositoryCustom和ARepositoryImpl中删除@Repository即可。 保留所有命名和接口/类层次结构。他们都没事。
答案 1 :(得分:4)
使用d = json.loads(j)
r = {}
for key, value in d.items():
r[key] = { k : value[0][k] for k in ['email', 'date', 'order_id', 'store'] }
r[key]['object_sales_types'] = [ { 'id_type_sale' : s['id_type_sale'], 'sale_type_description' : s['sale_type_description'] } for s in value]
print(json.dumps(r, indent=4))
打破周期的一种简单方法是说Spring懒惰地初始化一个bean。那就是:与其完全初始化bean,不如创建一个代理以将其注入到另一个bean中。注入的bean仅在第一次需要时才完全创建。
{
"105": {
"email": null,
"date": "2016-05-18",
"order_id": 105,
"store": "Ezio store",
"object_sales_types": [
{
"id_type_sale": 2,
"sale_type_description": "Coffee shop"
},
{
"id_type_sale": 5,
"sale_type_description": "Book shop"
}
]
},
"106": {
"email": null,
"date": "2016-05-19",
"order_id": 106,
"store": "Ezio store",
"object_sales_types": [
{
"id_type_sale": 3,
"sale_type_description": "Food"
},
{
"id_type_sale": 8,
"sale_type_description": "Articles"
}
]
}
}
答案 2 :(得分:2)
我测试了您的源代码,发现了一些棘手的问题。
首先,使用您的源代码,我收到以下错误:
There is a circular dependency between 1 beans in the application context:
- ARepositoryImpl (field private test.ARepository test.ARepositoryImpl.aRepository)
- aRepositoryImpl
然后,我猜Spring&#39;迷茫&#39;在ARepository
(JPA存储库)和ARepositoryImpl
(自定义存储库)之间。
因此,我建议您将 ARepository
重命名为其他内容,例如BRepository
。如果我重命名了类名,它就可以了。
根据Spring Data的官方文档(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/):
这些类需要遵循将命名空间元素的属性repository-impl-postfix附加到找到的存储库接口名称的命名约定。 此后缀默认为Impl