如何通过Map方法向HIbernate 5提供实体包



我是hibernate的新手,正在尝试使用hibernate 5和Spring Boot应用程序学习它。

我正在使用Map方法设置数据源相关属性,如下所示:

if(null == standardServiceRegistry) {
//the following map is an alternative to the hibernate.cfg.xml file
Map<String, String> dbSettings = new HashMap<>();
dbSettings.put(Environment.URL, "jdbc:postgresql://localhost:5432/saurabh");
dbSettings.put(Environment.USER, "postgres");
dbSettings.put(Environment.PASS, "root");
dbSettings.put(Environment.DRIVER, "org.postgresql.Driver");
dbSettings.put(Environment.SHOW_SQL, "true");
dbSettings.put(Environment.HBM2DDL_AUTO, "create");
dbSettings.put(Environment.DIALECT, "org.hibernate.dialect.PostgreSQL94Dialect");
dbSettings.put(Environment.NON_CONTEXTUAL_LOB_CREATION, "true");
// the rest of the code is same as with the xml file
standardServiceRegistry = new StandardServiceRegistryBuilder().applySettings(dbSettings).build();
MetadataSources metaDataSources = new MetadataSources(standardServiceRegistry);
Metadata metaData = metaDataSources.getMetadataBuilder().build();
sessionFactory = metaData.getSessionFactoryBuilder().build();
}

sessionfactory而言,这是可行的。我尝试运行一个Select version()查询,它运行良好。

现在,我将我的实体包com.saurabh.entities放在一个与包含上述配置的包并行的包中。

使用此设置,hibernate无法获取我的实体,并且默认情况下不会创建表。

然而,若我切换到hibernate.cfg.xml方法,并在xml文件中提供以下标记,它就可以正常工作。

<mapping class ="com.saurabh.entities.Employee" />

有人能解释一下将整个实体包一次分配给Hibernate的最佳方式是什么吗。

注意:我已经尝试在Spring.run()文件和HibernateConfig文件中分配@EntityScan({basePackage="com.saurabh.entities"})(我在这里获得会话工厂,如上所示(。

MetadataSources有正确的方法。

MetadataSources metaDataSources = new MetadataSources(standardServiceRegistry);
metaDataSources.addPackage("com.saurabh.entities");

试试看。

最新更新