介绍
既然您已经了解了Hibernate脏检查的基础知识 ,我们就可以深入研究增强的脏检查机制。 虽然默认的图遍历算法对于大多数用例可能已经足够,但有时您需要优化的脏检查算法,并且检测方法比构建自己的自定义策略更方便。
使用AntHibernate工具
传统上,Hibernate Tools专注于Ant和Eclipse。 从Hibernate 3开始就可以使用字节码检测了,但是它需要Ant任务来运行CGLIB或Javassist字节码增强例程。
Maven支持通过maven-antrun-plugin运行Ant任务:
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>Instrument domain classes</id>
<configuration>
<tasks>
<taskdef name="instrument"
classname="org.hibernate.tool.instrument.javassist.InstrumentTask">
<classpath>
<path refid="maven.dependency.classpath"/>
<path refid="maven.plugin.classpath"/>
</classpath>
</taskdef>
<instrument verbose="true">
<fileset dir="${project.build.outputDirectory}">
<include name="**/flushing/*.class"/>
</fileset>
</instrument>
</tasks>
</configuration>
<phase>process-classes</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>${javassist.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
因此,对于以下实体源类:
@Entity
public class EnhancedOrderLine {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Long number;
private String orderedBy;
private Date orderedOn;
public Long getId() {
return id;
}
public Long getNumber() {
return number;
}
public void setNumber(Long number) {
this.number = number;
}
public String getOrderedBy() {
return orderedBy;
}
public void setOrderedBy(String orderedBy) {
this.orderedBy = orderedBy;
}
public Date getOrderedOn() {