使用 micronaut-data-hibernate-jpa 库连接到 jpa 时出现错误

2024-01-12

我想将 JPA 用于 micronaut。为此我正在使用io.micronaut.data:micronaut-data-hibernate-jpa:1.0.0.M1图书馆。每当我运行应用程序并点击端点来获取数据时,我都会收到以下错误:

{
    message: "Internal Server Error: No backing RepositoryOperations configured for repository. Check your configuration and try again"
} 

我尝试查找错误,但没有找到。在这里附加我的文件。请帮忙。

构建.gradle

plugins {
    id "net.ltgt.apt-eclipse" version "0.21"
    id "com.github.johnrengelman.shadow" version "5.0.0"
    id "application"
}



version "0.1"
group "micronaut.test"

repositories {
    mavenCentral()
    maven { url "https://jcenter.bintray.com" }
}

configurations {
    // for dependencies that are needed for development only
    developmentOnly 
}

dependencies {
    annotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion")
    annotationProcessor "io.micronaut:micronaut-inject-java"
    annotationProcessor "io.micronaut:micronaut-validation"
    annotationProcessor "org.projectlombok:lombok:1.16.20"
    annotationProcessor 'io.micronaut.data:micronaut-data-processor:1.0.0.M1'

    implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
    compile 'io.micronaut.data:micronaut-data-hibernate-jpa:1.0.0.M1'
    implementation "io.micronaut:micronaut-inject"
    implementation "io.micronaut:micronaut-validation"
    implementation "io.micronaut:micronaut-runtime"
    implementation "io.micronaut:micronaut-http-server-netty"
    implementation "io.micronaut:micronaut-http-client"
    implementation 'nl.topicus:spanner-jdbc:1.1.5'



    runtimeOnly "ch.qos.logback:logback-classic:1.2.3"
    testAnnotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion")
    testAnnotationProcessor "io.micronaut:micronaut-inject-java"
    testImplementation "org.junit.jupiter:junit-jupiter-api"
    testCompile "org.junit.jupiter:junit-jupiter-engine:5.1.0"
    testImplementation "io.micronaut.test:micronaut-test-junit5"
    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine"
}

test.classpath += configurations.developmentOnly

mainClassName = "micronaut.test.Application"
// use JUnit 5 platform
test {
    useJUnitPlatform()
}
tasks.withType(JavaCompile){
    options.encoding = "UTF-8"
    options.compilerArgs.add('-parameters')
}

shadowJar {
    mergeServiceFiles()
}

run.classpath += configurations.developmentOnly
run.jvmArgs('-noverify', '-XX:TieredStopAtLevel=1', '-Dcom.sun.management.jmxremote')

存储库:

package micronaut.test.repo;

import io.micronaut.data.annotation.Repository;
import io.micronaut.data.repository.CrudRepository;
import micronaut.test.entity.Partner;

@Repository
public interface PartnerRepository extends CrudRepository<Partner,Integer> {
}

服务:

package micronaut.test.service;


import micronaut.test.entity.Partner;
import micronaut.test.repo.PartnerRepository;

import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.List;

@Singleton
public class SpannerService {
    private PartnerRepository partnerRepository;

    @Inject
    public SpannerService(PartnerRepository partnerRepository) {
        this.partnerRepository = partnerRepository;
    }

    public List<Partner> getPartners() {
        return (List<Partner>) partnerRepository.findAll();
    }
}

控制器:

package micronaut.test.controller;

import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.Produces;
import micronaut.test.entity.Partner;
import micronaut.test.service.SpannerService;

import javax.inject.Inject;
import java.util.List;

@Controller("/micronaut")
public class MainController {

    private SpannerService spannerService;

    @Inject
    public MainController(SpannerService spannerService) {
        this.spannerService = spannerService;
    }

    @Get("/data")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Partner> getPartners() {
        return spannerService.getPartners();
    }

}

堆栈跟踪:

io.micronaut.context.exceptions.ConfigurationException: No backing RepositoryOperations configured for repository. Check your configuration and try again
        at io.micronaut.data.intercept.DataIntroductionAdvice.findInterceptor(DataIntroductionAdvice.java:108)
        at io.micronaut.data.intercept.DataIntroductionAdvice.intercept(DataIntroductionAdvice.java:76)
        at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
        at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:150)
        at micronaut.test.repo.PartnerRepository$Intercepted.findAll(Unknown Source)
        at micronaut.test.service.SpannerService.getPartners(SpannerService.java:22)
        at micronaut.test.controller.MainController.getPartners(MainController.java:32)
        at micronaut.test.controller.$MainControllerDefinition$$exec2.invokeInternal(Unknown Source)
        at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:144)
        at io.micronaut.context.DefaultBeanContext$BeanExecutionHandle.invoke(DefaultBeanContext.java:2792)
        at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:235)
        at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:122)
        at io.micronaut.http.server.netty.RoutingInBoundHandler.lambda$buildResultEmitter$19(RoutingInBoundHandler.java:1408)
        at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:71)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.Flowable.subscribe(Flowable.java:14865)
        at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:37)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.Flowable.subscribe(Flowable.java:14865)
        at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.internal.operators.flowable.FlowableSwitchIfEmpty.subscribeActual(FlowableSwitchIfEmpty.java:32)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.Flowable.subscribe(Flowable.java:14865)
        at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.Flowable.subscribe(Flowable.java:14868)
        at io.micronaut.http.context.ServerRequestTracingPublisher.lambda$subscribe$0(ServerRequestTracingPublisher.java:52)
        at io.micronaut.http.context.ServerRequestContext.with(ServerRequestContext.java:52)
        at io.micronaut.http.context.ServerRequestTracingPublisher.subscribe(ServerRequestTracingPublisher.java:52)
        at io.reactivex.internal.operators.flowable.FlowableFromPublisher.subscribeActual(FlowableFromPublisher.java:29)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.Flowable.subscribe(Flowable.java:14865)
        at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
        at io.reactivex.Flowable.subscribe(Flowable.java:14918)
        at io.reactivex.Flowable.subscribe(Flowable.java:14865)
        at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
        at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:288)
        at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:253)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [io.micronaut.data.operations.RepositoryOperations] exists. Make sure the bean is not disabled by bean requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the bean is enabled then ensure the class is declared a bean and annotation processing is enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as an annotation processor).
        at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1903)
        at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:582)
        at io.micronaut.data.intercept.DataIntroductionAdvice.findInterceptor(DataIntroductionAdvice.java:105)
        ... 43 common frames omitted


Micronaut 目前仅支持开箱即用的 Tomcat JDBC、Apache DBCP2 和 Hikari 数据源提供程序(请参阅https://micronaut-projects.github.io/micronaut-sql/latest/guide/#jdbc https://micronaut-projects.github.io/micronaut-sql/latest/guide/#jdbc).

您可以将此行添加到您的构建.gradle它将 Tomcat JDBC 数据源提供程序实现添加到您的项目中:

runtime "io.micronaut.configuration:micronaut-jdbc-tomcat"

或者您可以选择其他实现,例如 Apache DBCP2:

runtime "io.micronaut.configuration:micronaut-jdbc-dbcp"

或者光:

runtime "io.micronaut.configuration:micronaut-jdbc-hikari"

For nl.topicus:spanner-jdbc您必须实现自己的数据源提供者DatasourceFactory and DatasourceConfiguration对于 Micronaut,因为还没有人。

你可以激励自己io.micronaut.configuration:micronaut-jdbc-tomcat。来源在这里:https://github.com/micronaut-projects/micronaut-sql/tree/master/jdbc-tomcat/src/main/java/io/micronaut/configuration/jdbc/tomcat https://github.com/micronaut-projects/micronaut-sql/tree/master/jdbc-tomcat/src/main/java/io/micronaut/configuration/jdbc/tomcat

例如DatasourceFactory然后可以看起来像这样:

@Factory
public class DatasourceFactory implements AutoCloseable {
    private static final Logger LOG = LoggerFactory.getLogger(DatasourceFactory.class);
    private List<nl.topicus.jdbc.CloudSpannerDataSource> dataSources = new ArrayList<>(2);

    private final DataSourceResolver dataSourceResolver;

    /**
     * Default constructor.
     * @param dataSourceResolver The data source resolver
     */
    public DatasourceFactory(@Nullable DataSourceResolver dataSourceResolver) {
        this.dataSourceResolver = dataSourceResolver == null ? DataSourceResolver.DEFAULT : dataSourceResolver;
    }

    /**
     * @param datasourceConfiguration A {@link DatasourceConfiguration}
     * @return An Apache Tomcat {@link DataSource}
     */
    @Context
    @EachBean(DatasourceConfiguration.class)
    public DataSource dataSource(DatasourceConfiguration datasourceConfiguration) {
        nl.topicus.jdbc.CloudSpannerDataSource ds = new nl.topicus.jdbc.CloudSpannerDataSource();
        ds.setJdbcUrl(datasourceConfiguration.getJdbcUrl());
        ...
        dataSources.add(ds);
        return ds;
    }

    @Override
    @PreDestroy
    public void close() {
        for (nl.topicus.jdbc.CloudSpannerDataSource dataSource : dataSources) {
            try {
                dataSource.close();
            } catch (Exception e) {
                if (LOG.isWarnEnabled()) {
                    LOG.warn("Error closing data source [" + dataSource + "]: " + e.getMessage(), e);
                }
            }
        }
    }
}

无论如何,您仍然可以将 Google Cloud Spanner DB 与 Hikari 和 Apache DBCP2 等数据源提供商一起使用。例如:

runtime 'nl.topicus:spanner-jdbc:1.1.5'
runtime "io.micronaut.configuration:micronaut-jdbc-hikari"

第一行添加 JDBC 驱动程序,第二行添加数据源提供程序,该提供程序将使用spanner-jdbcJDBC 驱动程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 micronaut-data-hibernate-jpa 库连接到 jpa 时出现错误 的相关文章

  • 使用 JPA 标准 API 进行日期比较

    我有一个包含两个日期的范围日期选择器 start and end 其中两者都可以为空 我想过滤一张表 其中实体具有确切的一个日期 date 所以 这里有一些例子 我愿意匹配 想象要匹配的日期是当前日期 17 07 2016 空 17 07
  • Hibernate 本机查询 - char(3) 列

    我在 Oracle 中有一个表 其中列 SC CUR CODE 是 CHAR 3 当我做 Query q2 em createNativeQuery select sc cur code sc amount from sector cost
  • 如何在 JPA 和 Hibernate 中将数据库生成的列值定义为只读字段?

    使用 MariaDB 10 2 可以定义日期时间的默认值 例如创建和最后修改 我应该如何将此列作为只读字段访问 因为这个值应该只在数据库的控制之下 并且不应该从代码中修改 但我想在代码中读取这个属性 这很简单 只需设置insertable
  • 实体类的重建

    我尝试在 netbeans 8 0 1 上运行带有 hibernate spring 和 jpa 的 Web 应用程序 但现在我在编译应用程序时遇到了这个异常 以下是错误 Failed to execute goal org apache
  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

    我有一个返回 sys refcursor 的 Oracle 函数 当我使用 Hibernate 调用该函数时 出现以下异常 Hibernate call my function org hibernate exception Generic
  • Swagger for Micronaut 与 Maven

    我想从 Spring Boot 2 切换到 Micronaut 框架 而且我在 Swagger 设置上遇到了困难 在 Spring Boot 2 项目中 我有以下依赖项
  • JPA 中所有命名查询的列表

    我想获取应用程序中所有 NamedQueries 的列表 并且我还想在运行时一般调用它们 是否有一个选项可以获取列表以及某种元数据 一般来说是某种反射 另一个线程为 NHibernate 提供了某种解决方案 即使使用 Hibernate 作
  • 多个罐子、单个持久单元解决方案?

    包括我在内的一些人一直在努力将不同模块 jar 中的实体合并到单个持久性单元中 尤其是JavaSE 例如这里JPA 2 0 自动从不同的 jar 添加实体类到 PersistenceUnit https stackoverflow com
  • 如何在 JPA 中使用枚举

    我有一个电影租赁系统的现有数据库 每部电影都有一个评级属性 在 SQL 中 他们使用约束来限制该属性的允许值 CONSTRAINT film rating check CHECK rating text text OR rating tex
  • Jpa 复合键可为空列

    我正在使用 Hibernate 的 JPA impl 来对一些表进行建模 我在映射表时遇到问题 没有主键 在 4 列上有唯一索引 其中 3 列可以为空 我尝试破解它并将索引定义为复合 Id 但由于某些列可为空 因此无法正常工作 JPA Hi
  • 在 Eclipse 中生成 POJO 的所有 setXXX 调用?

    我目前正在对 JPA 实体进行大量测试 其中我必须不断调用实体上的 setter 方法 如下所示 myEntity setXXX value myEntity setYYY value myEntity setZZZ value Eclip
  • 使用 Hibernate Envers 的复合表

    我有一个带有复合表的应用程序 其中包含一个额外的列 一切正常 直到我们添加 Hibernate Envers Audited org hibernate MappingException 无法读取 no pack response Resp
  • JPA 实体中的枚举字段

    我觉得问这个问题有点愚蠢 但我找不到这个问题的任何简单答案 以这个简单的实体为例 Entity Table name clienti public class Cliente implements Serializable private
  • JPA - 从一列中获取不同的价值

    我有一个只有几个字段的实体 其中之一是城市名称 现在我想从该表中获取所有不同城市的列表 我怎样才能存档它 我尝试使用 DISTINCT 关键字 但它不起作用 我使用 Hibernate 作为 JPA 提供程序 但我想在纯 JPA 查询中获取
  • 为什么 hibernate 在一张表中保存两个 @OneToMany 列表?

    想象一下使用 Hibernate 和 JPA 的简化代码如下 Entity class C Id GeneratedValue public long id MappedSuperclass abstract class A Id Gene
  • JPA Criteria API group_concat 用法

    我目前正在编写一份报告 其中一个字段需要 group concat CriteriaQuery
  • 从 EntityManagerFactory 连接 EntityManager 的问题

    我知道 spring 有它自己的 JPA 对象工厂 但我想让它按原样工作 从那里我将研究最佳实践 我只是处于理解过程中 这是我尝试为其生成 bean 的实际代码 EntityManagerFactory emf Persistence cr
  • JPA @OrderBy() 通过关系表

    我需要一些有关 JPA 框架的帮助 我读过一些关于这个主题的 某种程度上 的答案 但我无法得出任何结论 首先这是我正在使用的设计示例 BusinessObject public class ClassA Column name ID nul

随机推荐

  • 为什么在特定文件夹中找不到命令? [复制]

    这个问题在这里已经有答案了 我在 bin 文件夹中有一个 sh 文件 但是当我尝试使用它时 服务器在该文件夹中找不到它 home monju full app bin ls checkServer sh etf disagg config
  • 从 Scala/Java Spark 运行 PySpark

    我正在使用 Scala Spark 处理数据 并希望使用 pySpark python 进行进一步处理 下面是 Pyspark gt scala 的示例 但我正在寻找 scala gt Pyspark https www crowdstri
  • vscode 片段变量

    snippet with class binding prefix row variable body table class t tr t t td t t t 0 t t td t tr table 是否有可能 如果可以的话如何 创建类
  • Python:查找用户 ID 并移动目录 (Windows)

    我想要完成的任务是让我的程序将其自身从当前所在的文件夹移动到另一个文件夹 在本例中 视频 这是代码 import getpass import os userid getpass getuser print os getcwd os ren
  • 如何在android Wear中实现手势识别

    你好 我正在寻找如何检测 Android Wear 中的手势 在 Android 中我使用一些这样的代码 但在 Android Wear 中不起作用 有没有办法覆盖默认手势操作或只是识别它们 我的做法就像谷歌开发人员一样 https www
  • 如何在docker容器中启用php的mysql扩展? [复制]

    这个问题在这里已经有答案了 我有以下 docker compose yml web image nginx 1 17 1 alpine ports 80 80 volumes code code site conf etc nginx co
  • Spring配置文件给出了BeanDefinitionStoreException

    我正在尝试完成 Spring MVC 教程 http static springsource org docs Spring MVC step by step part1 htmlhttp static springsource org d
  • 通过 IHttpClientFactory 忽略 SSL 连接错误

    我在从我的 asp net core 2 2 项目连接到 https 站点时遇到问题 例如there https stackoverflow com questions 38138952 bypass invalid ssl certifi
  • 使用 Hibernate 持久保存接口集合

    我想用 Hibernate 来保存我的小动物园 Entity Table name zoo public class Zoo OneToMany private Set
  • 如何在本地测试 Azure 队列触发器函数?

    我创建了一个Azure Functions 项目并正在本地测试它 https blog kloud com au 2016 12 02 debugging azure functions in our local box 下面是我创建云队列
  • 如何求解稀疏矩阵的线性方程 AX=b

    我有稀疏矩阵 A 120 000 120 000 和向量 b 120 000 我想使用 Eigen 库求解线性系统 AX b 我尝试按照文档进行操作 但总是出现错误 我还尝试将矩阵更改为稠密并求解系统 Eigen MatrixXd H N
  • 由 find_or_create_by_ 创建的重复记录

    我有一个 ActiveRecord 对象 Corporation 我的项目中创建该对象实例的唯一调用如下所示 corp Corporation find or create by eveid and user id self corpora
  • 我可以在Windows下改变python ttk组合框的颜色吗?

    我在 Linux 下得到了工作代码 用于更改 python 2 7 下 Ttk 的 TCombobox 的外观 如果我在windows下运行代码 它不会工作 我知道 ttk 小部件的颜色和属性是依赖于平台的 我仍然不知道如何更改 Windo
  • 未找到 MY_Controller 类

    我想解决的主要问题是当有人想要访问管理面板时检查用户会话 我已经创建了 MY Controller 类并将其放入库中 class MY Controller extends CI Session public logged in FALSE
  • Android Viewpager EdgeEffect自定义颜色

    我正在尝试在我的应用程序的 Viewpager 中自定义 EdgeEffect 目的是用定制的红色 ics Overscroll EdgeEffect 替换蓝色 ics Overscroll EdgeEffect 所以一开始我编辑了过度滚动
  • cuda 3D纹理插值

    我正在尝试使用纹理内存和下面的代码通过 cuda 插入 3D 数组 我已将输入 f x y z 绘制为固定的 z 值 然后为 x 和 y 插入数组并再次绘制 i 它们看起来完全不同 我还在一维中尝试过这个 使用不同的代码 并且它在那里工作
  • 如何处理 UsernameNotFoundException spring security

    如何处理UsernameNotFoundException 在 Spring Security 中 当用户名未找到时UserDetailsService实现抛出一个UsernameNotFoundException 例如这样 Overrid
  • 将 UIDatePicker 从 12 小时制更改为 24 小时制并返回

    很抱歉 我的第一个问题有点简单 我花了一天时间阅读 NSLocale 和 NSCalendar 类描述 但我不知道这是否可能 我有一个 UIDatePicker 处于 UIDatePickerModeDateAndTime 模式 当前它根据
  • Java 正则表达式中的 POSIX 字符等效项

    我想在Java中使用这样的正则表达式 a e i 但是Java不支持POSIX类 a e etc 我怎样才能做到这一点 更准确地说 有没有办法不使用 US ASCII Java确实支持posix 字符类 http download orac
  • 使用 micronaut-data-hibernate-jpa 库连接到 jpa 时出现错误

    我想将 JPA 用于 micronaut 为此我正在使用io micronaut data micronaut data hibernate jpa 1 0 0 M1图书馆 每当我运行应用程序并点击端点来获取数据时 我都会收到以下错误 me