hibernate - JPA 正确定位和打包元模型

标签 hibernate gradle spring-data-jpa jpamodelgen

我正在尝试让我的项目为我的实体生成 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"

关于hibernate - JPA 正确定位和打包元模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60067034/

相关文章:

hibernate - 通过Gradle传递数据库凭证

java - Hibernate 总是运行冗余查询

hibernate - Grails:在Promise.onComplete()中没有 session

hibernate - 带有嵌入对象列表的 Grails 2.5.3 域类

java - Spring MVC Hibernate没有xml使用DriverManagerDataSource如何映射属性

java - ElasticSearch 日期转换为 Java LocalDateTime 失败

java - 将空值保存到多对一 hibernate 关系错误

android - 应用程序,内置于android studio中,未安装在低于7.0版本的android中

android - 如何根据所选的构建变体将后缀动态更改为插件版本?

android - 名称重复但维度不同的 Gradle 口味