Сопоставление имен столбцов и таблиц в EclipseLink - PullRequest
3 голосов
/ 05 октября 2010

Я использовал ImprovedNamingStrategy в спящем режиме, чтобы сопоставить имя поля Java с именем столбца MySQL.

ex) поле birthDate -> столбец birth_date, класс AccountRole -> таблица account_role

Я выполняю тестовую миграцию кода гибернации в код eclipselink.

Что в EclipseLink эквивалентно ImprovedNamingStrategy от hibernamte?

Ответы [ 3 ]

4 голосов
/ 17 декабря 2014
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" />
2 голосов
/ 13 октября 2010

Я не думаю, что есть эквивалент.

Где вы используете это?Для автоматического картирования?Вы можете использовать инструмент JPA (такой как Eclipse Dali), который будет генерировать JPA orm.xml или аннотации из объектной модели, они могут дать больший контроль над тем, как генерируется модель данных.

В общем случае с использованием JPAно не стандартное именование по умолчанию не будет переносимым.Если вы хотите, чтобы отображение использовало что-то отличное от значения по умолчанию, вам следует использовать аннотацию @Column или xml.

0 голосов
/ 05 марта 2013

Это возможно благодаря использованию интерфейса SessionCustomizer:

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

РЕДАКТИРОВАТЬ: к сожалению, потратив немного времени на попытки сделать эту работу, кажется, не работает, или, по крайней мере, не так просто. Обратите внимание, что эта ссылка была с 2008 года.

...