Регистрация конвертеров в JPA 2.1 с EclipseLink
В среде JavaEE я использую реализацию JPA 2.1 с EclipseLink,
У меня есть некоторые объекты, которые содержатenums
, Поэтому я создал конвертеры для этих перечислений.
Автомобиль лица:
@Entity
public class Car implements Serializable {
private static final long serialVersionUID = 6L;
@Id
private String id;
@Convert (converter = CarColorConverter.class)
private CarColor color;
public enum CarColor {
Black,
Gray,
White,
Red
};
public Car () {
id = GenerateUUID.id ();
}
....
}
CarColor Converter:
@Converter (converterClass = CarColorConverter.class, name = "CarColorConverter")
public class CarColorConverter implements AttributeConverter<CarColor, String> {
private static final String BLACK = "Black";
private static final String GRAY = "Gray";
private static final String WHITE = "White";
private static final String RED = "Red";
@Override
public String convertToDatabaseColumn (CarColor entityData) {
switch (entityData) {
case Black:
return BLACK;
case Gray:
return GRAY;
case White:
return WHITE;
case Red:
return RED;
default:
throw new IllegalArgumentException ("Unknown : " + entityData);
}
}
@Override
public CarColor convertToEntityAttribute (String dbData) {
switch (dbData) {
case BLACK:
return CarColor.Black;
case GRAY:
return CarColor.Gray;
case WHITE:
return CarColor.White;
case RED:
return CarColor.Red;
default:
throw new IllegalArgumentException ("Unknown : " + dbData);
}
}
}
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence
version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="xyz-restful-api" transaction-type="RESOURCE_LOCAL">
<!-- Converters -->
<!--<class>com.xyz.model.converters.CarColorConverter</class>-->
<!-- Entities / Model -->
<class>com.xtz.model.Car</class>
<properties>
...
</properties>
</persistence-unit>
</persistence>
когдаЯ комментирую объявление конвертера в файле persistence.xml и попытка сохранить мои сущности в БД я получаю эту ошибку: "Убедитесь, что имя класса преобразователя является правильным и существует с определением единицы сохраняемости.msgstr "и никаких исключений времени компиляции, только довольно явное предупреждение:
Класс "com.xyz.model.converters.CarTypeConverter" аннотирован, но не указан в файле persistence.xml
Однако когдаЯ раскомментирую объявление конвертера в файле persistence.xml и попытка сохранить мои объекты в БД я получаю эту ошибку: "Убедитесь, что имя класса преобразователя является правильным и существует с определением единицы сохраняемости.". и исключение времени компиляции:
Класс "com.xyz.model.converters.CarColorConverter" указан в файле persistence.xml, но не аннотирован
Я неправильно объявляю конвертеры?
Спасибо.