如何使用 Hibernate 工具任务向 DAO 生成中的类和属性添加 Hibernate 搜索注释。
似乎没有办法告诉休眠执行此任务以添加自定义注释。但是您可以使用一些代码来完成。
您应该扩展休眠 POJOExporter 类,并在扩展类中,将所有键和值添加到附加上下文中。这些键和值将在您的 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
}
同样,您可以为属性执行此操作。