如何使用Hibernate工具任务将Hibernate搜索注释添加到DAO生成中的类和属性中。
看来没有办法告诉hibernate做这个任务来添加自定义注释。但是你可以使用一些代码。
你应该延长休眠POJOExporter类和扩展类,添加所有关键&价值additionalContext.These重点&值将在FTL您FTL file.And可用您可以根据需要决定添加注释这些价值道具钥匙&。 这里扩展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
}
}
而且模板tooks像
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
}
同样可以为属性做到这一点。
只能生成初始正确映射的工具,因为一些手动调整总是必需的。您应该生成一次域名,然后将其提交到源代码管理并手动管理。 – Sanne
谢谢桑恩! 我认为这样做可能会更好。 – Pascal