gpt4 book ai didi

Java Spring Data @EnabledJPARepositories 问题

转载 作者:行者123 更新时间:2023-12-02 01:26:30 24 4
gpt4 key购买 nike

我使用 Spring Data 和 Hibernate 作为 JPA 提供程序,并有一个类,这是一个独立的应用程序,我在此项目中没有使用 Boot。

@Configuration
@ComponentScan(basePackages={basePackages})
@EnableJpaRepositories(basePackageClasses = {com.company.dao.UserDao.class})
public class Company{

我正在使用这样的 UserDao。

@Repository
public interface UserDao extends GenericDao<User>{
@Query("query")
public int findByLoginAndPass(@Param("login") String login,@Param("password") String password);
}

public interface GenericDao<T extends AbstractEntity> extends CrudRepository<T,Integer>{
}

这就像一个魅力,但后来我创建了一个 VehiculeService,它也使用 genericDAO。

@org.springframework.stereotype.Service
@Transactional
public class VehiculeServiceImpl implements VehiculeService<Vehicule> {
@Autowired
private GenericDao<T> genericDao;

@Override
public T save(final T entity){
return genericDao.save(entity);
}
}

这也很有效,那么问题是什么?

这两个类都使用 GenericDao,我没有使用任何 Spring 注释,并且在我正在使用的配置中

@EnableJpaRepositories(basePackageClasses = {com.company.dao.UserDao.class})

我在我的配置中看到 genericDao 作为 Spring 托管 bean,所以两个问题是:

1).为什么 GenericDao 在我的上下文中是托管 bean?正在扩展 CrudRepository 但 CrudRepository 是 @NoRepositoryBean 吗?如果我不扩展 Interface CrudRepository,我的类就不再是 bean。

2).为什么我可以在我的应用程序中存储车辆,即使我在 @EnabledJpaRepositories 中除了 UserDao 之外没有声明任何内容?

UserDao--->com.company.dao.UserDaoGenericDao-->com.company.dao.abstraction.GenericDao

如果我说

@EnableJpaRepositories(basePackageClasses = {com.company.dao.UserDao.class})

它会搜索哪里?

这是我第一次从头开始使用 Spring Data。

最佳答案

  1. 因为这就是 Spring Data JPA 的原理:它为每个扩展 Repository 的扫描接口(interface)创建一个 bean。

  2. 因为它与 UserDao 位于同一个包中,并且您告诉 JPA 扫描包含 UserDao 类的包:basePackageClasses = {com.company.dao.UserDao.class}

关于Java Spring Data @EnabledJPARepositories 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56836883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com