在EclipseLink中映射列和表名称

时间:2010-10-05 09:39:20

标签: hibernate jpa eclipselink

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

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

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

EclipseLink中与hibernamte的ImprovedNamingStrategy相同的是什么?

3 个答案:

答案 0 :(得分:4)

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" />

答案 1 :(得分:2)

我认为没有相应的内容。

你在哪里使用它?对于自动映射?您可以使用JPA工具(例如Eclipse Dali)来生成JPA orm.xml或来自对象模型的注释,它们可以更好地控制数据模型的生成方式。

通常使用JPA但不是标准命名默认值不可移植。如果您希望映射使用与默认值不同的映射,则应使用@Column注释或xml。

答案 2 :(得分:0)

通过使用SessionCustomizer界面似乎可以:

http://dev.eclipse.org/mhonarc/lists/eclipselink-users/msg00094.html

编辑:遗憾的是,在花了一些时间尝试完成这项工作之后,它似乎不起作用,或者至少不容易。请注意,此链接来自2008年。