HHH015007: недопустимый аргумент при инжекции поля статической метамодели: ожидается: PluralAttributeImpl $ SetAttributeImpl; встретил: SingularAttribute - PullRequest
0 голосов
/ 15 мая 2018

Я недавно обновил свой загрузочный проект 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;

?

1 Ответ

0 голосов
/ 15 мая 2018

Согласно документации здесь:

Аннотацию Convert не следует использовать для указания преобразования следующие: атрибуты Id, атрибуты версии, атрибуты отношений, и атрибуты, явно обозначенные как Enumerated или Temporal.

Таким образом, вместо Enum вы можете использовать встраиваемый класс и использовать точку (".") В элементе attributeName для обозначения атрибута во встроенном атрибуте, который в этом случае будет вашим встроенным. класс.

...