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