Я недавно обновил свой загрузочный проект Spring с 1.5.6 до 2.0.2 и теперь у меня проблема с одним из моих энтитов и генерацией их метамодели.
Проблема возникает с отображением набора перечислений, которое работало до этого.я переключился на 2.0.2.
При запуске веб-приложения он показывает мне следующую ошибку в моем журнале:
HHH015007: Illegal argument on static metamodel field injection : xxx.TestEntity_#testEnums; expected type : org.hibernate.metamodel.internal.PluralAttributeImpl$SetAttributeImpl; encountered type : javax.persistence.metamodel.SingularAttribute
Сущность и ее отображение:
public class TestEntity extends AbstractEntity {
...
@JsonIgnore
@ElementCollection(targetClass = TestEnum.class)
@Convert(converter = TestEnumConverter.class)
@CollectionTable(name = "engine_test_enum", joinColumns = @JoinColumn(name = "test_entity_id"))
private Set<TestEnum> testEnums = new HashSet<>();
...
}
Enum
public enum TestEnum implements CodeEnum, AliasEnum {
TEST1(1, "ALIAS1"),
TEST2(2, "ALIAS2"),
// ... and so on ...
;
private Integer code;
private String alias;
private TestEnum(Integer code, String alias) {
this.code = code;
this.alias = alias;
}
@Override
public Integer getCode() {
return code;
}
@Override
public String getAlias() {
return alias;
}
}
Класс преобразователя
@Converter
public class TestEnumConverter implements AttributeConverter<TestEnum, Integer> {
@Override
public Integer convertToDatabaseColumn(TestEnum testEnum) {
return TestEnum == null ? null : testEnum.getCode();
}
@Override
public TestEnum convertToEntityAttribute(Integer code) {
return EnumUtils.fromCode(TestEnum.class, code);
}
}
Генерируемый метамоделью класс
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(TestEntity.class)
public abstract class TestEntity_ extends xxx.AbstractEntity_ {
...
public static volatile SingularAttribute<TestEntity, TestEnum> testEnum;
...
}
Мои зависимости:
- все проекты весенней загрузки: 2.0.2.RELEASE
- hibernate-core & hibernate-jpamodelgen: 5.2.17.Final
- еще несколько библиотек, необходимых для проекта
Кто-нибудь знает причину такого поведения?
Сначала я подумал, что это просто проблема очистки рабочей области (с использованием eclipse).Но регенерация классов метамодели, кажется, в порядке в соответствии с их временными метками.
Как мы видим, сгенерированный класс действительно содержит атрибут SingularAttribute ... но что я делаю неправильно, что это не отображается как:
SetAttribute<TestEntity, TestEnum> testEnums;
?