Hibernate 6移除XML映射后,无注解类映射的替代方案咨询
Hibernate 6中无需注解的类映射替代方案
Hibernate 6移除了原生的.hbm.xml映射文件支持,但仍有两种无需给持久化类添加注解的映射方案,且能保留原XML映射的核心优势:
JPA标准
orm.xml映射文件
Hibernate 6完全兼容JPA规范定义的orm.xml配置文件,你可以在这个文件中完整定义实体的映射规则(包括表名、字段映射、关联关系、主键策略等),实体类本身无需添加任何注解。这种方案完美继承了原XML映射的优点:无需实体类源代码即可完成映射,还能根据不同环境加载不同的orm.xml文件,实现服务器端与客户端的差异化映射。程序化映射(Programmatic Mapping)
这是Hibernate 6官方推荐的灵活替代方案,完全通过Java代码构建映射元数据,不依赖注解或XML。你可以在外部代码中独立定义实体的映射规则,甚至能针对不同上下文动态生成不同的配置,同样无需修改实体类源码。
示例代码如下:// 初始化服务注册 StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .configure() .build(); // 构建映射元数据 Metadata metadata = new MetadataSources(serviceRegistry) .addClass(User.class) .getMetadataBuilder() .applyEntityMapping(User.class, entity -> { // 指定表名 entity.table("sys_users"); // 配置主键 entity.id("userId", id -> { id.column("user_id"); id.generator(GeneratorType.IDENTITY); }); // 配置属性映射 entity.property("username", prop -> { prop.column("user_name"); prop.length(50); prop.notNull(true); }); }) .build(); // 创建SessionFactory SessionFactory sessionFactory = metadata.buildSessionFactory();
内容的提问来源于stack exchange,提问作者Emmanuel Bourg
相关产品推荐
相关产品推荐

