JPA (EclipseLink), обработка типов без повторяющихся аннотаций @Converter? - PullRequest
1 голос
/ 10 февраля 2011

Можно ли установить класс для сериализации определенным образом с помощью EclipseLink, не помечая его как таковой при каждом его использовании? Например, скажем, у меня был класс:

class MyObj {
    private int a;
    private int b;

    public MyObj(int a, int b) {
        this.a = a;
        this.b = b;
    }

    ...
}

Я хочу, чтобы это было сохранено в столбце базы данных в виде строки "a = 1, b = 2". Я не хочу, чтобы он был сериализован в BLOB-объект, но должен действительно оказаться строкой в ​​столбце VARCHAR. Я могу сделать это с помощью конвертера, но мне нужно иметь аннотацию везде, где я использую класс:

@Entity
class User {
    @Column(name="first")
    private MyObj one;

    @Column(name="second")
    private MyObj two;

    ...

}

Выше не будет работать, так как он не знает, как преобразовать тип без аннотаций - я хочу иметь возможность эффективно зарегистрировать конвертер по умолчанию для типа. (Я попытался поиграть с Serializable / Externalizable безуспешно, так как в итоге я пытался вставить массив байтов в базу данных.)

Возможно ли это с помощью стандартного JPA или EclipseLink? В Hibernate, похоже, есть что-то вроде @TypeDef, которое, похоже, вполне может сработать, но я использую EclipseLink.

Ответы [ 3 ]

1 голос
/ 06 октября 2011

Использование конвертера - лучший способ. Вы можете определить SessionCustomizer, который сканирует ваш проект и устанавливает преобразование, или создать собственный настраиваемый ConversionManager, но лучше всего явно настроить преобразователь на отображение.

0 голосов
/ 06 октября 2011

Вы можете получить метод установки с использованием стандартных типов и преобразовать его самостоятельно. Например:

@ Класс сущности Пользователь { @Column (имя = "первый") личное MyObj один;

public void setOne(String myObj){
     one = convert(myObj);
}

public String getOne(){
    return convertBack(one);
}

}

0 голосов
/ 20 августа 2011

Кажется, нет способа сделать это, что кажется позором. В конце я прокомментировал использование класса явным образом для членов класса.

...