能否修改hibernate.properties文件名?该文件的加载位置在哪?
hibernate.properties的默认加载逻辑与自定义命名方法
默认hibernate.properties的文件名硬编码定义在org.hibernate.cfg.Environment类的PROPERTIES_FILE常量中,值为hibernate.properties。在你实例化Configuration对象时,Hibernate会自动尝试读取类路径根目录下的该文件,不需要额外调用方法触发加载。
该文件名不是不可修改的,你可以通过自定义加载逻辑使用任意名称的properties配置文件:
- 自行读取自定义名称的properties文件到
java.util.Properties实例 - 调用
Configuration#setProperties()方法将自定义配置注入即可,示例代码:
Properties customProps = new Properties(); try (InputStream is = getClass().getResourceAsStream("/my-custom-hibernate.properties")) { customProps.load(is); } catch (IOException e) { // 处理文件读取异常 } Configuration config = new Configuration(); config.setProperties(customProps);
hibernate.properties与hibernate.cfg.xml的关系
两者是可独立使用的等价配置方案,并非必须搭配使用:
- 仅用
hibernate.properties:实例化Configuration后自动加载配置,无需调用configure()方法 - 仅用
hibernate.cfg.xml:实例化Configuration后调用configure()方法加载配置即可
如果同时存在两个配置文件,hibernate.cfg.xml中的同项配置会覆盖hibernate.properties的配置值。
基于properties配置时的映射注册方法
hibernate.properties本身没有提供声明映射文件、注解实体的配置项,这是它和xml配置的核心差异:xml可以通过<mapping>标签直接注册映射,properties仅负责存储Hibernate的核心属性配置。
使用properties作为配置源时,你需要通过编程式方法注册映射:
- 注册hbm映射文件:调用
config.addResource("com/xxx/entity/User.hbm.xml") - 注册注解实体类:调用
config.addAnnotatedClass(User.class) - 批量注册指定包下的注解实体:调用
config.addPackage("com.xxx.entity")
对于Hibernate的配置,我们可以使用简单的hibernate.properties文件、更复杂的hibernate.cfg.xml文件,甚至是完全程序化的配置方式。
官方文档的表述是准确的,两种配置方式的核心作用都是注入Hibernate运行需要的属性,只是properties格式不支持内置映射声明,需要额外的编程式操作补充。
内容的提问来源于stack exchange,提问作者Giorgi Tsiklauri
相关产品推荐
相关产品推荐

