hibernate - 在 EclipseLink 中映射列名和表名

标签 hibernate jpa eclipselink

我在 hibernate 中使用了 ImprovedNamingStrategy,将 Java 字段名映射到 MySQL 列名。

ex) birthDate 字段 -> birth_date 列,AccountRole 类 -> account_role 表

我正在测试将 hibernate 代码迁移到 eclipselink 代码。

EclipseLink 中与 hibernamte 的 ImprovedNamingStrategy 等效的是什么?

最佳答案

public class MyCustomizer implements SessionCustomizer {

    public void customize(Session session) throws Exception {
        Map<Class, ClassDescriptor> descs = session.getDescriptors();
        Collection<ClassDescriptor> descriptors = descs.values();
        for (ClassDescriptor desc : descriptors) {
            updateMappings(desc);
        }
    }

    private void updateMappings(ClassDescriptor desc) {
        for (DatabaseMapping mapping : desc.getMappings()) {
            if (mapping.isDirectToFieldMapping()) {
                DirectToFieldMapping directMapping = (DirectToFieldMapping) mapping;
                String name = directMapping.getAttributeName();
                String regex = "([a-z])([A-Z]+)";
                String replacement = "$1_$2";
                String newName = name.replaceAll(regex, replacement)
                        .toUpperCase();
                directMapping.getField().resetQualifiedName(newName);
            }
        }
    }
}

将属性插入到 persistence.xml 中:

  <property name="eclipselink.session.customizer" value="com.test.MyCustomizer" />

关于hibernate - 在 EclipseLink 中映射列名和表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3862437/

相关文章:

java - 反序列化后如何将对象重新附加到 EclipseLink session

java - hibernate 多对一删除 child 时删除所有 parent

java - 当对实体使用注释和 hbm 混合时,Spring/Hibernate 无法初始化 EntityManager

java - JPA @SqlResultSetMapping 无法处理要映射到空 POJO 的空 sql 结果 - 而是抛出异常

java - 如何从 Spring-Data-JPA 返回单个结果?

对 Jakarta Persistence(JPA) 3.0 的 Hibernate 支持

spring - Jpa + Spring - 从数据库读取后自动设置 transient 字段值

java - JPA 事件监听器不工作

java - spring mvc,maven,hibernate java.lang.ClassNotFoundException : com.实体.Candidate

java - JPA 和 Derby 性能