JPA 元模型的正确位置和包装
JPA correct location and packaging of metamodels
我正在尝试让我的项目为我的实体生成 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):
Project→Properties→Java Build Path→Add
folder→"$(YourProjectName)/build/generated"
我正在尝试让我的项目为我的实体生成 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):
Project→Properties→Java Build Path→Add folder→"$(YourProjectName)/build/generated"