обновление hibernate с 5.3.2 до 5.4.10 прервало компиляцию - PullRequest
2 голосов
/ 27 января 2020

У нас есть некоторый критический код платформы, так как платформа загружает пользовательские компоненты Hibernate, когда пользователь выполняет редактирование на веб-странице. Код выглядит так:

@Override
public <T> boolean isManaged(Class<T> paramTypeToCreate) {
    EntityManager entityManager = Em.get();
    try {
        ManagedType<T> managedType = entityManager.getMetamodel().managedType(paramTypeToCreate);
        EntityTypeImpl<T> entityType = (EntityTypeImpl<T>) managedType;
        if(!entityType.hasSingleIdAttribute()) {
            log.warn("You generally should be using beans with hibernate ids since this is a hibernate class");
            return false; //if no single id attribute, let the default creator create the bean
        }

    } catch(IllegalArgumentException e) {
        return false;
    }
    return true;
}

Мы не хотели зависеть от такого низкоуровневого кода, но это был единственный способ узнать, управлялся ли входящий класс управлением в спящем режиме или нет, и затем искать Атрибут id, чтобы мы могли загрузить объект. Есть ли новый (надеюсь, более опубликованный c api) для предоставления hibernate класса (ie. Bean.getClass ()) и запроса hibernate, управляет ли он этим как bean-компонента hibernate, а затем спрашивает атрибут has single id. Это специально для версии 5.4.10.

Мы находимся на версии 5.3.2 и пытаемся выполнить обновление.

Чтобы добавить дополнительные сведения, мы убедимся, что этот код будет работать после загрузить объект по его идентификатору

    EntityManager entityManager = Em.get();
    Metamodel metamodel = entityManager.getMetamodel();
    ManagedType<T> managedType = metamodel.managedType(paramTypeToCreate);
    EntityTypeImpl<T> entityType = (EntityTypeImpl<T>) managedType;
    Class<?> idClazz = entityType.getIdType().getJavaType();
    SingularAttribute<? super T, ?> idAttribute = entityType.getId(idClazz);
    String name = idAttribute.getName();

спасибо, Дин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...