Hibernate: использование StaticMetamodel

281
21 июля 2021, 23:50

Установка и настройка.

Добавил зависимость (система сборки - Gradle):

// https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-jpamodelgen
compile group: 'org.hibernate.orm', name: 'hibernate-jpamodelgen', version: '6.0.0.Alpha2'

Указал препроцессор аннотаций:

annotationProcessor('org.hibernate:hibernate-jpamodelgen:6.0.0.Alpha2')

Используемый в примере ниже класс:

@Entity
@Table(name = "author")
public class Author {
    @Id
    @Column(name = "id")
    @GeneratedValue(generator = "incrementor")
    private Long id;
    @Column(name = "first_name")
    private String firstName;
    @Column(name = "last_name")
    private String lastName;
    public Author() { }
    // getters and setters
}

Сгенерированный класс:

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Author.class)
public abstract class Author_ {
    public static volatile SingularAttribute<Author, String> firstName;
    public static volatile SingularAttribute<Author, String> lastName;
    public static volatile SingularAttribute<Author, Long> id;
    public static final String FIRST_NAME = "firstName";
    public static final String LAST_NAME = "lastName";
    public static final String ID = "id";
}

Пример:

@Override
public List<Author> findAllByLastName(String lastName) {
    var cb = entityManager.getCriteriaBuilder();
    var query = cb.createQuery(Author.class);
    var author = query.from(Author.class);
    query.where(cb.equal(author.get(Author_.lastName), lastName));
    return entityManager.createQuery(query).getResultList();
}

Вызов author.get(Author_.lastName) генерирует исключение NullPointerException:

@Override
@SuppressWarnings("unchecked")
public <Y> PathImplementor<Y> get(SingularAttribute<? super T, Y> attribute) {
    return getWrappedPathDetyped().get( attribute );
}

, в момент вызова параметр attribute равен null.

Пробовал использовать константу LAST_NAME (из класса Author_) - получаю исключение с описанием:

java.lang.ClassCastException: class org.hibernate.query.criteria.spi.SingularPathBasic cannot be cast to class org.hibernate.query.sqm.tree.expression.SqmExpression (org.hibernate.query.criteria.spi.SingularPathBasic and org.hibernate.query.sqm.tree.expression.SqmExpression are in module org.hibernate.orm.core@6.0.0.Alpha2 of loader 'app')

Подскажите, пожалуйста, в чем может быть ошибка?

READ ALSO
Ошибка при запуске Apache Tomcat в Windows 10, (Непредвиденное появление: Files\Java\jdk-12.0.2&ldquo;&rdquo;) как можно исправить? [закрыт]

Ошибка при запуске Apache Tomcat в Windows 10, (Непредвиденное появление: Files\Java\jdk-12.0.2“”) как можно исправить? [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

132
как сделать rest запрос по дате . Java springboot

как сделать rest запрос по дате . Java springboot

Каждые два секунд , я получаю данные с сайта заношу их в бд и мне нужно сделать rest запрос по DateЯ сделал rest запрос по всем данным

138
Не работает canvas в JavaScript

Не работает canvas в JavaScript

Пытался отрисовать картинку и ничегоПопробовал линию

170