Hibernate Gradle插件相当于hibernate-enhance-maven-plugin
,并提供构建时代码增强功能。官方文档没有提到apply plugin: 'something'
行。如果我只是按照指南所说的去做,我会得到:
找不到参数的方法 hibernate() ...
我尝试用apply plugin: 'enhance'
(如此线程建议)和apply plugin: 'org.hibernate.orm'
(如此测试所建议的那样)猜测插件名称,但它只是说具有该 id 的插件是未知的。
有没有人设法成功设置此插件?
我的build.gradle如下:
allprojects {
group 'xxx'
version '1.0-SNAPSHOT'
}
subprojects {
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
...
}
}
project(':xxx-model') {
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath "org.hibernate:hibernate-gradle-plugin:5.0.7.Final"
}
}
apply plugin: 'org.hibernate.orm'
hibernate {
enhance {}
}
}
... more unrelated project blocks here
尝试将buildscript{...}
移入根部,allprojects
和subprojects
,但没有有用的结果。
对于 Gradle
一个完整的示例如下所示:
apply plugin: 'java'
repositories {
mavenLocal()
mavenCentral()
}
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath "org.hibernate:hibernate-gradle-plugin:$hibernateVersion"
}
}
apply plugin: 'org.hibernate.orm'
hibernate {
enhance {
enableLazyInitialization= true
enableDirtyTracking = true
enableAssociationManagement = true
}
}
dependencies {
compile 'org.hibernate:hibernate-core:$hibernateVersion'
}
对于马文
<plugin>
<groupId>org.hibernate.orm.tooling</groupId>
<artifactId>hibernate-enhance-maven-plugin</artifactId>
<version>${hibernate.version}</version>
<executions>
<execution>
<configuration>
<enableLazyInitialization>true</enableLazyInitialization>
<enableDirtyTracking>true</enableDirtyTracking>
<enableAssociationManagement>true</enableAssociationManagement>
<enableExtendedEnhancement>false</enableExtendedEnhancement>
</configuration>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
设置增强插件后,Hibernate会重新编译实体类并更改字节码,如下所示:
public void setDetails(PostDetails details) {
this.$$_hibernate_write_details(details);
}
public void $$_hibernate_write_details(PostDetails details) {
if (!Objects.deepEquals(details, this.details)) {
this.$$_hibernate_trackChange("details");
}
this.details = details;
}
public void $$_hibernate_trackChange(String property) {
if (this.$$_hibernate_tracker == null) {
this.$$_hibernate_tracker = new SimpleFieldTracker();
}
this.$$_hibernate_tracker.add(property);
}
$$_
方法特定于休眠,并包含实体检测逻辑。
apply plugin: 'org.hibernate.orm'
插件代码表明您从测试中获得的内容是正确的。您可能缺少的是buildScript
部分中的repositories
部分,用于从中获取插件jar。
字节码增强的官方文档(从 5.1 开始)实际上是用户指南。 该文档仍然没有提到应用此插件,因为我们假设一些基本的 Gradle 知识来使用 Gradle ;) 但是,该用户指南部分最好也指定如何应用该插件(我在Jira中为此创建了一个问题)。
同时,插件 id 的名称是 org.hibernate.orm
,因此您需要添加:
apply: 'org.hibernate.orm'