Hibernate ツール タスクを使用して、DAO 生成でクラスとプロパティに Hibernate 検索注釈を追加する方法。
カスタム注釈を追加するためにこのタスクを実行するように hibernate に指示する方法はないようですが、いくつかのコードで実行できます。
hibernate POJOExporter クラスを拡張し、拡張されたクラスで、すべてのキーと値を additionalContext に追加する必要があります。これらのキーと値は、ftl ファイルで使用できます。ftl では、これらのキーと値の小道具に基づいて注釈を追加する決定を下すことができます。これが拡張pojoエクスポーターです
public class JavaDAOExporter extends PojoExporter {
private static final String JAVA_DAO_FTL = "templates/hibernate/java/dao.ftl";
private String serviceId;
public JavaDAOExporter() {
super();
}
public JavaDAOExporter(Configuration cfg, File outputdir, String serviceId, MetaDataDialect metadataDialect) {
super(cfg, outputdir, metadataDialect);
this.serviceId = serviceId;
}
protected void init() {
super.init();
setTemplateName(JAVA_DAO_FTL);
setFilePattern("{package-name}/dao/{class-name}Dao.java");
}
@Override
protected void exportPersistentClass(Map additionalContext, POJOClass element) {
//Element is the pojo class,here you can take decision to add annotation in the class,if so add your key&value attributes.Which will be used in ftls.
additionalContext.put("searchAnnotationForClass", true);
exportPOJO(additionalContext, element);
}
public String getName() {
return "hbm2javadao";
}
protected void exportComponent(Map additionalContext, POJOClass element) {
// noop - we dont want components
}
}
そして、テンプレートは次のようになりました
package ${pojo.getPackageName()}.dao;
<#assign classbody>
<#assign declarationName = pojo.importType(pojo.getDeclarationName())>
import org.springframework.stereotype.Repository;
@Repository("${serviceId}.${declarationName}Dao")
//Adding annotation only if searchAnnotationForClass is true
<#if true = searchAnnotationForClass>
@Search("${serviceId})
</#if>
public class ${declarationName}Dao{
//add all your dao template
}
同様に、プロパティに対しても実行できます。