我正在使用带有注释的hibernate和带有freemarker模板的hibernate工具来自动生成我的orm dao类。
现在我想实现hibernate搜索,因此希望将hibernate搜索注释添加到这些类和属性中。
但我不知道如何以及在哪里可以配置哪些类和属性我希望hibernate工具进行注释。
freemarker模板的问题是,我只能为所有类定义类生成策略。但是对于hibernate搜索实现,我想只注释特定的类,只注释这些类中的特定属性。
有什么方法可以定义哪些类和getter属性我想通过hibernate工具注释?或者在构建过程之后自动注释类?
到目前为止我可以排除的解决方案:
感谢您的帮助!
答案 0 :(得分:1)
如何使用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
}
同样,你可以为属性做到这一点。