hibernate - JPA 正确定位和打包元模型
问题描述
我正在尝试让我的项目为我的实体生成 JPA 元模型。我在我的项目中使用 gradle,所以我将此行添加到我的 build.gradle 依赖项对象
annotationProcessor('org.hibernate:hibernate-jpamodelgen')
它实际上可以工作,并且元模型是在我的项目的构建目录中生成的(不是 src!)
generated.sources.annotationProcessor.java.main.petmenu.entities
问题是他们声明了他们的源实体的同一个包而不是他们预期的包,他们甚至不导入他们的源实体类,就像它们驻留在同一个包中一样。
package petmenu.entities;
import javax.annotation.Generated;
import javax.persistence.metamodel.SetAttribute;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Costituente.class)
public abstract class Costituente_ {
...
...
...
}
显然我可以很容易地修复包声明和丢失的导入,但我觉得这些任务不是自动完成的,这听起来很奇怪。难道我做错了什么?
编辑:这是 Eclipse 在包声明时抛出的错误
The declared package "petmenu.entities" does not match the expected package "generated.sources.annotationProcessor.java.main.petmenu.entities"
解决方案
好的。即使对我来说不是很清楚,我也找到了解决方案。我必须为生成的元模型设置一个自定义目录。我实现了将这些行添加到 build.gradle
ext{
generatedMetamodels = "${buildDir}/generated/"
}
sourceSets{
main.java.srcDir generatedMetamodels
}
compileJava{
options.annotationProcessorGeneratedSourcesDirectory = file(generatedMetamodels)
}
真诚地,我仍然不明白为什么这不是处理器的默认行为。无论如何,有了这种定制,Eclipse 将不再抱怨项目结构和包声明之间的不匹配。
请记住将生成的目录添加到 IDE 源类路径。 对于 Eclipse 4.14(实际上是 SpringToolSuite 4.5.0 中的 Eclipse Equinox):
项目→属性→Java 构建路径→添加文件夹→“$(YourProjectName)/build/generated”
推荐阅读
- strapi - STRAPI 正在剪切最后 3 个字符
- jquery - Laraver 数据库查询
- ajax - Ajax 自动完成功能在 Laravel 6 中无法正常工作
- flutter-web - 在 Flutter Web 中使用 js 库
- excel - 如何应用 Application.ShortcutMenus 以便在右键单击表格时仍然出现宏?
- c# - 如何将数据从 SQL 数据库字段类型(nvarchar)同步到 Dynamics CRM 字段类型(查找)
- apache-spark - 在 Databricks 中设置驱动程序内存配置
- r - 行号以更快的方式按特定条件增加 R
- python - 我无法在 word 文件中遍历 Python-docx 文档
- javascript - 在数组js中推送多维数组