Можно ли написать общий конвертер enum для JPA?

Я хотел написать конвертер для JPA, который хранит любое перечисление как UPPERCASE. Некоторые перечисления, с которыми мы сталкиваемся, пока не соблюдают соглашение об использовании только заглавных букв, поэтому до их рефакторинга я все еще сохраняю будущее значение.

Что я получил так далеко:

package student;

public enum StudentState {

    Started,
    Mentoring,
    Repeating,
    STUPID,
    GENIUS;
}

Я хочу, чтобы «Начато» было сохранено как «НАЧАЛО» и так далее.

package student;

import jpa.EnumUppercaseConverter;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

@Entity
@Table(name = "STUDENTS")
public class Student implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long mId;

    @Column(name = "LAST_NAME", length = 35)
    private String mLastName;

    @Column(name = "FIRST_NAME", nullable = false, length = 35)
    private String mFirstName;

    @Column(name = "BIRTH_DATE", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date mBirthDate;

    @Column(name = "STUDENT_STATE")
    @Enumerated(EnumType.STRING)
    @Convert(converter = EnumUppercaseConverter.class)
    private StudentState studentState;

}

конвертер в настоящее время выглядит так:

package jpa;


import javax.persistence.AttributeConverter;
import java.util.EnumSet;

public class EnumUppercaseConverter<E extends Enum<E>> implements AttributeConverter<E, String> {

    private Class<E> enumClass;

    @Override
    public String convertToDatabaseColumn(E e) {
        return e.name().toUpperCase();
    }

    @Override
    public E convertToEntityAttribute(String s) {
        // which enum is it?
        for (E en : EnumSet.allOf(enumClass)) {
            if (en.name().equalsIgnoreCase(s)) {
                return en;
            }
        }
        return null;
    }

}

что не сработает, так это то, что я не знаю, какой будет enumClass во время выполнения. И я не мог найти способ передать эту информацию конвертеру в аннотации @Converter.

Так есть ли способ добавить параметры в конвертер или немного обмануть? Или есть другой способ?

Я использую EclipseLink 2.4.2

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос