可以自动扫描包来自动创建SessionFactory吗?

Gau*_*tam 9 java hibernate hibernate-mapping

我可以配置Hibernate自动扫描包创建一个SessionFactory@Entity注释豆?

目前我正在使用

Configuration config = new Configuration() ;
config.addAnnotatedClass(MyEntity.class);
Run Code Online (Sandbox Code Playgroud)

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

请注意我想在普通的Java项目中实现这一点,而不使用任何Spring或此类框架.

使用Spring之前已经回答了类似的问题,但我想在不使用Spring或其他框架的情况下实现它.我对一些这样做的简单库开放.

v.l*_*nev 8

不.即使使用最新的Hibernate 5版本,你也不能说Hibernate扫描包的持久化类.Configuration有方法addPackage(),但它用于读取"包级元数据"(.package-info- files).

你不想使用Spring,那么你能做什么:

使用流利的休眠

您可以使用 来自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();
Run Code Online (Sandbox Code Playgroud)

使用新的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();
Run Code Online (Sandbox Code Playgroud)

使用其他库

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