micronaut - java : Unable to implement Repository method: PersonRepository. 保存(对象实体)。找不到可能的实现

标签 micronaut micronaut-data

我正在创建一个小端点,但它对我不起作用。这非常简单,为此我使用 micronaut

我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.autentia</groupId>
    <artifactId>autentia</artifactId>
    <version>0.1</version>
    <packaging>${packaging}</packaging>

    <parent>
        <groupId>io.micronaut</groupId>
        <artifactId>micronaut-parent</artifactId>
        <version>3.3.4</version>
    </parent>

    <properties>
        <packaging>jar</packaging>
        <jdk.version>11</jdk.version>
        <release.version>11</release.version>
        <micronaut.version>3.3.4</micronaut.version>
        <exec.mainClass>com.autentia.Application</exec.mainClass>
        <micronaut.runtime>netty</micronaut.runtime>
    </properties>

    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-inject</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-validation</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.test</groupId>
            <artifactId>micronaut-test-junit5</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-http-client</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-http-server-netty</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-jackson-databind</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-runtime</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.data</groupId>
            <artifactId>micronaut-data-hibernate-jpa</artifactId>
            <version>3.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>io.micronaut.build</groupId>
                <artifactId>micronaut-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <!-- Uncomment to enable incremental compilation -->
                    <!-- <useIncrementalCompilation>false</useIncrementalCompilation> -->

                    <annotationProcessorPaths combine.children="append">
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.18.22</version>
                        </path>
                        <path>
                            <groupId>io.micronaut</groupId>
                            <artifactId>micronaut-http-validation</artifactId>
                            <version>${micronaut.version}</version>
                        </path>
                        <path>
                            <groupId>io.micronaut.data</groupId>
                            <artifactId>micronaut-data-processor</artifactId>
                            <version>3.2.2</version>
                        </path>
                    </annotationProcessorPaths>
                    <compilerArgs>
                        <arg>-Amicronaut.processing.group=com.autentia</arg>
                        <arg>-Amicronaut.processing.module=autentia</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project> 

我的存储库:


import com.prueba.entity.Person;
import io.micronaut.data.annotation.Repository;
import io.micronaut.data.repository.CrudRepository;

@Repository
public interface PersonRepository extends CrudRepository<Person, Long> {

}

我的实体:



import lombok.Getter;
import lombok.Setter;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@Getter
@Setter
public class Person {

    @Id
    @GeneratedValue
    private Long Id;

    private String name;

    private String surname;

}

最后报错了

java:无法实现存储库方法:PersonRepository.findById(Object id)。无法在不存在的属性上查询实体 [Person]:Id

我可能做错了什么?谢谢

最佳答案

理想情况下,您应该下载或创建 micronaut 项目并选择 Lombok 依赖项,这样就不会遇到此问题。

但是如果您想稍后在项目中添加 lombok,这里是指南。

您需要做的就是以正确的顺序添加依赖项。 注释处理器的顺序似乎在这里发挥着重要作用。 如下所述使用这些依赖项。

注意:这个答案基于 gradle,但这个概念也应该适用于 Maven

第 1 步:使用下面的 lombok 注释处理器作为依赖项中的第一件事:

annotationProcessor("org.projectlombok:lombok")

第 2 步:然后在注释处理器之后,使用 lombok 编译时依赖项:

compileOnly("org.projectlombok:lombok")

第 3 步:然后您可以编写其余的依赖项:

implementation("io.micronaut.data:micronaut-data-hibernate-jpa")
runtimeOnly("ch.qos.logback:logback-classic")
...
...

build.gradle(依赖项部分)

dependencies {

    /* Step 1 */
    annotationProcessor("org.projectlombok:lombok")
    annotationProcessor("io.micronaut:micronaut-http-validation")
    annotationProcessor("io.micronaut.data:micronaut-data-processor")
    annotationProcessor("io.micronaut.openapi:micronaut-openapi")

    /* Step 2 */
    compileOnly("org.projectlombok:lombok")

    /* Step 3 */
    implementation("io.micronaut:micronaut-http-client")
    implementation("io.micronaut:micronaut-jackson-databind")
    implementation("io.micronaut.flyway:micronaut-flyway")
    implementation("io.micronaut.oraclecloud:micronaut-oraclecloud-atp")
    implementation("io.micronaut.oraclecloud:micronaut-oraclecloud-sdk")
    implementation("io.micronaut.sql:micronaut-jdbc-hikari")
    implementation("jakarta.annotation:jakarta.annotation-api")
    implementation("io.micronaut.data:micronaut-data-hibernate-jpa")
    implementation("org.apache.commons:commons-lang3:3.12.0")
    implementation("io.swagger.core.v3:swagger-annotations")
    runtimeOnly("ch.qos.logback:logback-classic")
}

关于micronaut - java : Unable to implement Repository method: PersonRepository. 保存(对象实体)。找不到可能的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71416952/

相关文章:

java - 如何在micronaut中获取当前主机和端口?

Micronaut 框架/已登录但未经授权

hikaricp - 使用 hikari 数据源构建 micronaut 原生镜像

kotlin - 乐观锁 : unsupported Version type long

oracle - Micronaut-data : No current JDBC Connection found. 考虑将此调用包装在事务边界中

java - 如何在 MicronautTest 中设置 @Value?

kotlin - 为什么使用@singleton而不是仅使用对象

docker - CORS header 两次响应

postgresql - 如何将 JsonNode 参数(micronaut + kotlin)保存为 postgres 数据库中的 jsonb