【问题标题】:Micronaut Unable to implement Repository method: Repository.update(Object entity). No possible implementations foundMicronaut 无法实现存储库方法:Repository.update(Object entity)。未找到可能的实现
【发布时间】:2020-03-14 23:18:16
【问题描述】:

这是我的堆栈:
- Micronaut 1.3.2
- Java 8
- 日食 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>

我的仓库:

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

@Repository
public interface UsuarioRepository extends CrudRepository<UsuarioModel, Long> { }

我的服务:

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;
}

application.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'

当我在我的 Micronaut 项目上运行安装 maven 命令时,我收到错误:

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

有人经历过吗?

提前致谢!

编辑

这是我的 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

}

还有我的 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
}

【问题讨论】:

  • 请包含您的Usuario 课程。
  • 向我们展示UsuarioModel 类。能够解决这个问题很重要。
  • 嗯实体没问题。此异常通常是由于缺少@Entity 注释引起的。但在这种情况下不是。您可以尝试从 application.yml 中删除 jpa.default.entity-scan 定义吗?
  • 感谢您的支持!我试过没有它,但想到了同样的错误:/

标签: java maven micronaut micronaut-data


【解决方案1】:

编辑:

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

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

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

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

只需注释掉来自javax.persistence.* 的任何导入并尝试使用原生io.micronaut.data.annotation*

如果问题在于注释过程的某些扭曲,这将更清楚 - 我希望。

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

【讨论】:

  • 抱歉回复晚了,首先谢谢!请你解释一下这个@field 来自哪个包?
  • 对不起,我很糟糕:那是一个 kotlin 装饰器!我忘记了我使用的是 kotlin 而不是 java。无论如何,我已经编辑了我的答案。请查看编辑部分。
猜你喜欢
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多