如何将JPA元模型与gradle,intellij IDEA一起使用?



我正在使用java 8,spring boot 2.0.0,spring-data-jpa(spring-boot-starter-data-jpa),gradle,intellij。我一直在尝试使用 JPA 元模型,但很难找到如何配置。

实体类的元模型不仅仅是生成的。

我以为这很简单,但现在看来可能是错误的。如何使用它?

JDK11/Gradle 5.0/Hibernate 5.3.7.Final

sourceSets.main.java.srcDirs += "${buildDir}/generated"
compileJava {
options.annotationProcessorGeneratedSourcesDirectory = file("${buildDir}/generated")
}
dependencies {
annotationProcessor("javax.xml.bind:jaxb-api")
annotationProcessor("org.hibernate:hibernate-jpamodelgen")
}

生成的元模型类将在"构建/生成"时生成

如果您使用的是 JDK8 或 Hibernate 5.4+,则可能不需要annotationProcessor("javax.xml.bind:jaxb-api")

前几天我使用缩放的元模型gradle插件(https://plugins.gradle.org/plugin/com.scalified.plugins.gradle.metamodel)做到了这一点。我正在使用 Spring Boot 2.0.5,但我不明白为什么它与 Spring Boot 2.0.0 的工作方式不同。我也在使用 Gradle 4.8.1。

以下是我的build.gradle的摘录。

buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath (
"org.springframework.boot:spring-boot-gradle-plugin:2.0.0",
"gradle.plugin.com.scalified.plugins.gradle:metamodel:0.0.1");
}
}
apply plugin: "com.scalified.plugins.gradle.metamodel"
// The plugin will default to the latest version of Hibernate if this is not specified
metamodel {
hibernateVersion = '5.2.14.Final' // For Spring Boot 2.0.0
hibernateVersion = '5.2.17.Final' // For Spring Boot 2.0.5
}

这会在 src/generate 下构建元模态文件,并且可以在代码中使用它们。我还必须更改 IntelliJ 设置,因为 IntelliJ 的构建自动排除了一些可能长时间运行的 Gradle 任务。 有关更多详细信息,请参阅使用 IntelliJ IDEA 和 https://youtrack.jetbrains.com/issue/IDEA-175165 在项目构建中自动运行 Gradle 任务。

我为克服此问题而更改的此设置是:首选项->构建/执行/部署->Gradle->Runner->将 IDE 构建/运行操作委托给 Gradle。 另一种方法是根据需要手动运行元模型编译 gradle 任务。 如果您不经常更改实体,这将减少一点重建时间。