java - hibernate 扫描包可以自动创建 SessionFactory 吗?

标签 java hibernate hibernate-mapping

我可以将 Hibernate 配置为自动扫描包以从 @Entity 注释的 beans 创建一个 SessionFactory 吗?

我目前正在使用

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

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

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

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

最佳答案

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

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

使用 fluent-hibernate

你可以使用 EntityScanner来自 fluent-hibernate库(除了库,你不需要其他 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 .

关于java - hibernate 扫描包可以自动创建 SessionFactory 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35245619/

相关文章:

sql - 使用 hibernate 更快的选择语句

java - Hibernate + JPA + jTDS + SQL Server = Unicode 问题

oracle - 如何在 Hibernate 中使用 Oracle 查询提示

java - 如何替换 Java 中的所有组出现?

java - java中Arrays.fill的复杂性

java - Realm Java Android : Create or update object

java - 一对一映射的概念。解释映射

java - 无法执行 onClick

java - 表有时不会通过 Hibernate native 查询进行更新

java - Hibernate:行已被另一个事务更新或删除(或未保存的值映射不正确)