Micronaut 无法实现存储库方法:Repository.update(对象实体)。找不到可能的实现

Hie*_*ill 5 java maven micronaut micronaut-data

这是我的堆栈:
- Micronaut 1.3.2
- Java 8
- Eclipse STS 4

Pom.xml 摘录:

<dependency>
            <groupId>io.micronaut.configuration</groupId>
            <artifactId>micronaut-jdbc-hikari</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.data</groupId>
            <artifactId>micronaut-data-hibernate-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micronaut.configuration</groupId>
            <artifactId>micronaut-hibernate-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
<path>
    <groupId>io.micronaut.data</groupId>
    <artifactId>micronaut-data-processor</artifactId>
    <version>1.0.0.M1</version>
</path>

Run Code Online (Sandbox Code Playgroud)

我的存储库:

import io.micronaut.data.annotation.Repository;
import io.micronaut.data.repository.CrudRepository;

@Repository
public interface UsuarioRepository extends CrudRepository<UsuarioModel, Long> { }
Run Code Online (Sandbox Code Playgroud)

我的服务:

private UsuarioDTO atualizar(UsuarioDTO usuario) {
      UsuarioModel modelo = new UsuarioModel();
      modelo.setIdade(usuario.idade);
      modelo.setNick(usuario.nick);
      modelo.setNome(usuario.nome);
      modelo.setPassword(usuario.password);
      this.usuarioRepository.update(modelo);
      return usuario;
}
Run Code Online (Sandbox Code Playgroud)

应用程序.yml:

micronaut:
  application:
    name: micronaut-chatroom
  server: 
    cors:
      enabled: true
datasources:
  default:
    url: jdbc:h2:mem:devDb
    driverClassName: org.h2.Driver
    username: sa
    password: ''
    schema-generate: CREATE_DROP
    dialect: H2
jpa:
  default:
    entity-scan:
        packages: 'com.cr.model'

Run Code Online (Sandbox Code Playgroud)

当我在 Micronaut 项目上运行 Install maven 命令时,出现错误:

[错误] 无法在项目 micronaut-chatroom 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile):编译失败 [错误] 无法实现存储库方法:UsuarioRepository。更新(对象实体)。没有找到可能的实现。

有人经历过吗?

提前致谢!

编辑

这是我的 UsuarioModel 类

@Entity(name = "Usuario")
@Table(name = "usuario")
public class UsuarioModel implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = -7468837154917949190L;
    @Id
    @GeneratedValue
    private Long id;
    private String nome;
    private String nick;
    private String idade;
    private String password;

    @OneToMany
    private List<MensagemModel> mensagens;

    //Getter/Setters ommited

}
Run Code Online (Sandbox Code Playgroud)

还有我的 MensagemModel 课程:

@Entity(name = "Mensagem")
@Table(name = "mensagem")
public class MensagemModel implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 7634793331670289187L;
    @Id
    @GeneratedValue
    private Long id;
    @CreationTimestamp
    private LocalDateTime data;
    private String conteudo;

    @ManyToOne
    @JoinColumn(name = "usuario_id")
    private UsuarioModel usuario;
    //Getter/Setter ommited
}
Run Code Online (Sandbox Code Playgroud)

mat*_*ati 3

编辑:

micronaut 中的装饰器有 2 个可能的来源@Id

  • “本机”注释包:io.micronaut.data.annotation
  • jpa 持久性包可用作:jakarta.persistence-apimaven 中的依赖项

当您用我来装饰类时,@Entity我想您正在使用后一组装饰器。或者至少是两种来源的混合。

作为基本调试步骤,您可以尝试删除对 j​​avax.persistance 的任何引用并使用仅本机装饰器。因此,例如,不要使用@Entity而是@MappedEntity等等。

只需注释掉任何导入javax.persistence.*并尝试使用 native 即可io.micronaut.data.annotation*

如果问题出在注释过程的某些扭曲上,我希望这会更清楚。

旧垃圾已被删除 - 与 Kotlin 相关