小编典典

可以休眠扫描软件包以自动创建SessionFactory吗?

hibernate

可以将Hibernate配置为自动扫描软件包以SessionFactory从带@Entity注释的Bean 创建A 吗?

目前我正在使用

Configuration config = new Configuration() ;
config.addAnnotatedClass(MyEntity.class);

我不想使用hibernate.cfg.xml配置映射。

请注意,我想在不使用任何Spring或此类框架的情况下,在一个普通的Java项目中实现这一目标。

以前使用Spring可以回答类似的问题,但是我想在不使用Spring或其他框架的情况下实现。我对执行此操作的一些简单库持开放态度。


阅读 248

收藏
2020-06-20

共1个答案

小编典典

不能。即使使用最新的Hibernate
5版本,您也不能说Hibernate扫描软件包中的持久性类。Configuration具有方法addPackage(),但用于读取“包级元数据”(.package- info-文件)。

您不想使用Spring,那么您可以做什么:

使用流畅hibernate

您可以从fluent-hibernate库使用
EntityScanner(除了库之外,您将不需要其他jar)

对于Hibernate 4和Hibernate 5:

Configuration configuration = new Configuration();
EntityScanner.scanPackages("my.com.entities", "my.com.other.entities")
    .addTo(configuration);
SessionFactory sessionFactory = configuration.buildSessionFactory();

使用新的Hibernate 5引导API:

List<Class<?>> classes = EntityScanner
        .scanPackages("my.com.entities", "my.com.other.entities").result();

MetadataSources metadataSources = new MetadataSources();
for (Class<?> annotatedClass : classes) {
    metadataSources.addAnnotatedClass(annotatedClass);
}

SessionFactory sessionFactory = metadataSources.buildMetadata()
    .buildSessionFactory();

使用其他库

如果您已经使用了可用于扫描的库(例如,Reflections),则有一个测试项目,其中包含使用各种库进行实体扫描的示例:hibernate-
scanners-test

2020-06-20