1

我使用hibernate和注释以及带有freemarker模板的hibernate工具来自动生成我的orm dao类。使用Hibernate工具添加Hibernate搜索注释

现在我想实现hibernate搜索,因此希望将hibernate搜索注释添加到这些类和属性。

但我不知道如何以及在哪里可以配置哪些类和属性我希望hibernate工具进行注释。

freemarker模板的问题是,我只能为所有类定义类生成策略。但是对于hibernate搜索实现,我只想注释特定的类,并且只注释这些类中的特定属性。

有什么方法可以定义哪些类和getter属性我想通过hibernate工具进行注释?或者在构建过程之后自动注释这些类?

解决方案,我可以排除为止:

  • 代码生成之后手动添加注解 - >它必须是在FreeMarker的模板自动
  • 使用几个if语句,如“如果类名==测试添加@Index到类“ - >它只是将很多,特别是与属性的注释
  • 添加一些设置reveng.xml文件 - >至少我不知道这可以帮助

感谢您的帮助!

+0

只能生成初始正确映射的工具,因为一些手动调整总是必需的。您应该生成一次域名,然后将其提交到源代码管理并手动管理。 – Sanne

+0

谢谢桑恩! 我认为这样做可能会更好。 – Pascal

回答

1

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

同样可以为属性做到这一点。

+0

谢谢@Sunil。虽然我无法测试您的解决方案,因为我不再使用ftl,但我相信它可能会帮助有类似问题的人。 – Pascal