如何使用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