我們在使用JPA動態查詢構建查詢條件時,為了實現安全的類型檢查,常常需要引用Hibernate JPA Metamodel Generator自動為我們生成靜態元模型類。
而這些類由於編譯時由Hibernate JPA Metamodel Generator自動生成在其他路徑下,IDEA默認無法自動識別這些“特別”的類,所以IDEA中的JPA動態查詢相關代碼常常會出現編譯錯誤。
如果你使用的是Gradle構建工具,只需在構建腳本中添加如下內容即可解決此類問題啦。
build.gradle添加的配置如下:
// 所有自動生成的代碼(比如JPAMetaModelEntityProcessor自動生成的代碼等)都統一存放到build/generated目錄下 // 同時將該目錄添加到main SourceSets中,以便IDEA可以識別 compileJava { options.compilerArgs << "-s" options.compilerArgs << "$projectDir/build/generated" doFirst { file(new File("$projectDir/build/generated")).mkdirs() } } sourceSets.main.java.srcDirs += "$projectDir/build/generated"
執行gradle clean build之后,再次用IDEA打開工程,編譯問題就都解決啦。