可以将Hibernate配置为自动扫描软件包以SessionFactory从带@Entity注释的Bean 创建A 吗?
SessionFactory
@Entity
目前我正在使用
Configuration config = new Configuration() ; config.addAnnotatedClass(MyEntity.class);
我不想使用hibernate.cfg.xml配置映射。
hibernate.cfg.xml
请注意,我想在不使用任何Spring或此类框架的情况下,在一个普通的Java项目中实现这一目标。
以前使用Spring可以回答类似的问题,但是我想在不使用Spring或其他框架的情况下实现。我对执行此操作的一些简单库持开放态度。
不能。即使使用最新的Hibernate 5版本,您也不能说Hibernate扫描软件包中的持久性类。Configuration具有方法addPackage(),但用于读取“包级元数据”(.package- info-文件)。
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。