为了账号安全,请及时绑定邮箱和手机立即绑定

Spring JPA、Hibernate中哪个类负责扫描@Entity注解?

Spring JPA、Hibernate中哪个类负责扫描@Entity注解?

繁花不似锦 2023-07-28 09:54:21
我正在寻找一个负责扫描 JPA、Hibernate 或 Spring 中所有用@Entity注释的类的类。我想扩展该类并在扫描该类时添加一些逻辑。我到处搜索(spring 文档、JPA、Hibernate 文档)但找不到它。
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

一旦 Spring boot 检测到您需要,JPA 存储库的自动配置就会启用。
根据@JpaRepositoriesAutoConfiguration规范(重点是我的):

Spring Data 的 JPA 存储库的自动配置。当上下文中配置了 DataSource 类型的 bean、Spring Data JPA JpaRepository 类型位于类路径上并且没有配置其他现有 JpaRepository 时激活。一旦生效,自动配置相当于使用 EnableJpaRepositories 注释启用 JPA 存储库。该配置类将在 Hibernate 自动配置后激活。

要覆盖它,请显式添加@EnableJpaRepositories注释,但除了注释中定义的字段之外,您无法添加任何逻辑。


查看完整回答
反对 回复 2023-07-28
?
浮云间

TA贡献1829条经验 获得超4个赞

无法帮助你负责扫描的native类,但是可以告诉你如何在你自己的类中进行扫描。该代码是从我的项目借用的 - 它可以公开每个实体的 id。您不必每次都向列表中添加新内容 - 很容易忘记这一步。您需要有一个扩展 RepositoryRestConfigurerAdapter 或 RepositoryRestMvcConfiguration 的配置,并添加一个方法,如下所示:


@Override

public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {


    // getting a list of all classes annotated with @Entity

    List<Class<?>> classes = CPScanner.scanClasses(new PackageNameFilter("ru.outofrange.*"),

            new ClassFilter().appendAnnotation(Entity.class));

    Class[] arrayClasses = new Class[classes.size()];


    for (int i = 0; i < classes.size(); i++) {

        arrayClasses[i] = classes.get(i);

    }


    config.exposeIdsFor(arrayClasses);

}

需要此依赖项:


<dependency>

    <groupId>net.sf.corn</groupId>

    <artifactId>corn-cps</artifactId>

    <version>1.0.1</version>

</dependency>


查看完整回答
反对 回复 2023-07-28
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

我认为这是一个非常广泛的问题,但您需要查看源代码才能理解。



查看完整回答
反对 回复 2023-07-28
  • 3 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信