JPA правильное расположение и упаковка метамоделей - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь, чтобы мой проект генерировал метамодели JPA для моих сущностей. Я использую gradle в своем проекте, поэтому я добавил эту строку в свой объект зависимостей build.gradle

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

Это на самом деле работает, и метамодели генерируются внутри директории сборки моего проекта (не sr c! ) в

generated.sources.annotationProcessor.java.main.petmenu.entities

Проблема заключается в том, что они объявляют один и тот же пакет своих исходных сущностей вместо ожидаемого и даже не импортируют свои классы исходных сущностей, как если бы они находились в одном пакете .

package petmenu.entities;

import javax.annotation.Generated;
import javax.persistence.metamodel.SetAttribute;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Costituente.class)
public abstract class Costituente_ {
...
...
...
}

Очевидно, я мог бы легко исправить объявление пакета и отсутствующий импорт, но мне кажется странным, что эти задачи не выполняются автоматически. Я что-то не так делаю?

РЕДАКТИРОВАТЬ: Это ошибка, которую Eclipse выдает при объявлении пакета

The declared package "petmenu.entities" does not match the expected package "generated.sources.annotationProcessor.java.main.petmenu.entities"

1 Ответ

0 голосов
/ 05 февраля 2020

Хорошо. Я нашел решение, даже если оно мне не совсем понятно. Я должен установить пользовательский каталог для сгенерированных метамоделей. Я добился того, что добавив эти строки в build.gradle

ext{
    generatedMetamodels = "${buildDir}/generated/"
}
sourceSets{
    main.java.srcDir generatedMetamodels
}

compileJava{
    options.annotationProcessorGeneratedSourcesDirectory = file(generatedMetamodels)
}

С уважением, я до сих пор не понимаю, почему это не поведение процессора по умолчанию. В любом случае, с этой настройкой Eclipse больше не будет жаловаться на несоответствие между структурой проекта и объявлениями пакетов.

Не забудьте добавить сгенерированный каталог в исходный путь к классу IDE. Для Eclipse 4.14 (фактически Eclipse Equinox из SpringToolSuite) 4.5.0):

Проект → Свойства → Java Путь сборки → Добавить папку → «$ (YourProjectName) / build / generate»

...