【问题标题】:How to create a Micronaut project with JPA Entity from external classes from another jar如何使用来自另一个 jar 的外部类的 JPA 实体创建 Micronaut 项目
【发布时间】:2022-11-30 17:38:32
【问题描述】:
  1. 我有一个 Micronaut 项目,我正在尝试使用我在 Spring JPA 中添加的外部实体类在 pom.xml 中添加依赖项来构建项目,但我总是遇到错误:由以下原因引起:io.micronaut.context.exceptions.ConfigurationException:找不到 JPA 配置的实体:包 [packageName] 中的“默认”
    • [失败] 我已经在 pom.xml 中添加了我的实体 jar 与“scope compile”的依赖项
    • [失败] 已经用“@Introspected(classes = User.class)”创建了一个类文件,User.class 驻留在我的外部实体 jar 中,根据 micronaut 文档,我们可以通过添加注释来使用已经编译的类@Introspected,但这不起作用
    • [失败] 如果这可以确定实体类,我还将 @Entity 和 @Introspected 组合在同一个类中,但它不起作用
    • [失败] 我还尝试创建一个 AnnotationMapper,这将自动映射包与“javax.persistence.Entity”,参见参考资料https://github.com/micronaut-projects/micronaut-core/blob/3.5.x/inject/src/main/java/io/micronaut/inject/beans/visitor/EntityReflectiveAccessAnnotationMapper.java
    • 删除依赖项 micronaut-data-spring-jpa 不需要实体类,但 Micronaut 到 Spring JPA 存储库的自动迁移会出错。

    注意:在我的 Micronaut 项目中,我没有 @Entity 类,因为我想使用我制作的 Spring JPA 实体类的外部 jar,这样我就可以将它重用于其他应用程序。

    编辑:mvn clean install 或作为日志运行:

    io.micronaut.context.exceptions.BeanInstantiationException: 无法加载 Bean 定义 [org.hibernate.SessionFactory]:实例化 [org.hibernate.boot.SessionFactoryBuilder] 类型的 bean 时出错

    消息:未找到 JPA 配置的实体:包 [packageName] 中的“默认”。检查您是否在应用程序配置的“jpa.default.entity-scan.packages”属性中正确指定了包含 JPA 实体的包,并且这些实体是使用 Micronaut 编译的还是使用 @Introspected(packages= "foo.bar", includedAnnotations=Entity.class) 在您的应用程序类上声明 采用的路径:SessionFactory.hibernateSessionFactory(SessionFactoryBuilder sessionFactoryBuilder) --> SessionFactory.hibernateSessionFactory([SessionFactoryBuilder sessionFactoryBuilder]) --> SessionFactoryBuilder.hibernateSessionFactoryBuilder([MetadataSources metadataSources],ValidatorFactory validatorFactory,Interceptor hibernateInterceptor)

【问题讨论】:

  • 您是否正确设置了注释处理器?您是否看到生成了额外的类?
  • @Denis,你能进一步详细说明吗?如果我是 maven clean install,除了运行应用程序之外,我还会遇到它,请参阅上面的日志(无法在评论中粘贴日志,它太长了)
  • 问题可能是您没有在注释处理器类路径中正确设置io.micronaut:micronaut-inject-java

标签: micronaut-data micronaut-rest


【解决方案1】:

这是我为解决自己的问题所做的:

  1. 我又从头开始了,我用的是https://micronaut.io/launch/ 生成工作区(类似于https://start.spring.io/,用于春季)
  2. 我没有直接使用外部 jar 中的 User.class,而是首先在 micronaut 项目(包括存储库)上创建它,并证明应用程序启动并工作(我还公开了一个服务来触发测试)
  3. 然后,我将 User.class 的引用从本地更改为外部 jar。当我最初尝试它时,没有“@Introspected”,遇到“没有找到持久类”,但是使用“@Introspected”,它可以工作。
  4. 我可以使用外部类中的实体,但不能使用存储库类(目前,不会进一步研究如何将外部 jpa 存储库类用于 micronaut)

【讨论】:

  • 带有存储库的外部项目需要有 micronaut-data 注释处理器才能工作。
【解决方案2】:

我有同样的问题,我是这样解决的:

  • 添加@Introspected(classes={Entity}.class)应用.java你的班级Micronaut项目
@Introspected(classes = {Entity}.class)
public class Application {
    public static void main(String[] args) {
        Micronaut.run(Application.class, args);
    }
}

这将导入您的实体类并制作JPA将其识别为JPA实体.

只是提醒:您的 {Entity} 类必须使用 @Entity 注释

import javax.persistence.Entity;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2011-05-11
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多